如何将值从<option> <select>传递到Rails-controller的方法?

时间:2019-02-25 19:02:14

标签: ruby-on-rails

我想和你分享我的问题。 如何将 阿贾克斯: 函数call(){ $('#Submit')。prop('disabled',true); var msg = $('#form')。serialize(); $ .ajax({ 输入:“ GET”, 网址:“ / targets”, 数据:味精, 成功:功能(数据){ $('#Submit')。prop('disabled',false); } }); } 控制器: def一 ... 结束 防御二 ... 结束 防御三 ... 结束 routes.rb Rails.application.routes.draw做 资源:目标 devise_for:用户 根目录:'targets#index' 结束

1 个答案:

答案 0 :(得分:0)

使用case语句现在拥有它的方式实际上是我已经看到的最常见的方式,只是做了一些修改:

AsyncTask Docs

这是相当易读的,并且适用于大多数情况。但是,如果要将此逻辑完全移出控制器,则可以使用routing constraint

def index
  case params[:select_action]
  when 'one'
    one
  when 'two'
    two
  end
end

请注意,尽管这是“选择加入”约束,但所有不匹配的内容都将落入索引操作。

这也是一件很新奇的事情,因此,该项目的新手很容易被此绊倒。但是,这很可能是完成任务的最佳方法。这种方法的好处是使用# you can create a constraint object to perform the match ParamMatchContraint = Struct.new(:parameter, :expected_value) do def matches?(request) request.params[parameter] == expected_value end end Rails.application.routes.draw do resources :targets do # a lambda will work as well as a constraint class root constraints: lambda {|request| request.params[:select_action] == 'one'}, action: :one root constraints: ParamMatchContraint.new(:select_ation, 'two'), action: :two end ... end only的过滤器可以指定您的自定义操作,并且您可以使用默认约定基于操作名称指定视图,而不必手动指定视图文件