26

在 simple_form 视图中,提交按钮是这样的:

<%= f.button :submit, 'Save' %>

subaction单击Save按钮时,我们正在尝试传递参数。params[:subaction]单击按钮后应该具有“更新”的值。这是我们尝试过的,但没有奏效:

<%= f.button :submit, 'Save', :subaction => 'update' %>

params[:subaction]单击Save按钮时有没有办法传递一个值?

4

3 回答 3

43

使用名称和值选项。

   <%= f.button  :submit , name: "subaction",value: "update"%>

在您的控制器中,您将获得值为“update”的 params[:subaction]

于 2013-07-29T07:59:25.600 回答
23

正如 dax 指出的那样,

<%= hidden_field_tag(:subaction, 'update') %>
<%= f.button :submit, 'Save' %>

这将通过隐藏字段为路由控制器操作提供字符串值“更新”。然后它可以由控制器检索

params[:subaction]
于 2015-02-23T08:32:30.077 回答
14

通过指定f.button :button, type: 'submit',我们可以使用namevalue属性来使用单个参数提交。值得注意的是,提交的值(例如,'cake')可能与按钮文本(例如,'The Best Cake')不同。

_form.html.erb

<%= f.button :button, 'The Best Cake', type: 'submit', name: 'dessert_choice', value: 'cake' %>
<%= f.button :button, 'The Best Pie', type: 'submit', name: 'dessert_choice', value: 'pie' %>

控制器

def controller_action
  dessert_choice = params[:dessert_choice] # 'cake' or 'pie'
end

这种方法避免了上面评论中提到的@dax 对隐藏输入的需要。

使用 Rails 4.2 在 Simple Form 3.3.1 上测试。

于 2017-02-12T20:28:42.643 回答