有没有办法在rails 3.2.12中的simple_form视图中单击提交按钮时传递参数?

use*_*363 22 ruby-on-rails-3 simple-form

在simple_form视图中,提交按钮如下所示:

<%= f.button :submit, 'Save' %>
Run Code Online (Sandbox Code Playgroud)

我们试图subaction在单击Save按钮时传递参数.在params[:subaction]点击该按钮后,应该有"更新"的价值.以下是我们在视图中尝试的但它不起作用:

<%= f.button :submit, 'Save', :subaction => 'update' %>
Run Code Online (Sandbox Code Playgroud)

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

Tha*_* kp 38

使用名称和值选项.

   <%= f.button  :submit , name: "subaction",value: "update"%>
Run Code Online (Sandbox Code Playgroud)

在你的控制器中你会得到params [:subaction],其值为"update"

  • 刚尝试了这个,它正在为我需要的东西工作,但它正在将提交按钮的文本更改为"value:"的值 - 是否有一种方法可以保持名称/值为控制器提供所需的信息,同时仍然具有名称我选择提交按钮?即:按钮文本应为"下一个学生",但它是"2"`<%= f.submit"下一个学生",:class =>'big_button round unselectable',name:"student_group_id",value:@ student_group.id% >` (12认同)
  • 实际上,我使用hidden_​​field_tag而不是+1,谢谢! (3认同)
  • 在某个时候是否不赞成这种行为? (2认同)

eme*_*ery 19

正如达克斯指出的那样,

<%= hidden_field_tag(:subaction, 'update') %>
<%= f.button :submit, 'Save' %>
Run Code Online (Sandbox Code Playgroud)

这将通过隐藏字段为路由控制器操作提供字符串值'update'.然后可以由控制器检索它

params[:subaction]
Run Code Online (Sandbox Code Playgroud)


chr*_*sto 10

通过指定f.button :button, type: 'submit',我们可以使用如下的namevalue属性来使用单个参数进行提交.值得注意的是,提交的值(例如,"蛋糕")可能与按钮文本不同(例如,"最佳蛋糕").

_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' %>
Run Code Online (Sandbox Code Playgroud)

调节器

def controller_action
  dessert_choice = params[:dessert_choice] # 'cake' or 'pie'
end
Run Code Online (Sandbox Code Playgroud)

这种方法避免了对上面注释中提到的@dax隐藏输入的需求.

使用Rails 4.2在Simple Form 3.3.1上进行测试.