以 ERB 形式将多个参数值从视图传递到控制器
Passing multiple param values from view to controller in ERB form
我有一个表格:
<%= form_tag("index", method: "get") do %>
<%= label_tag(:query, "Search for:") %>
<%= text_field_tag(:query) %>
<select>
<%= options_for_select Species.all.collect{|sp| [sp.name, sp.id]}.insert(0, "Select Species") %>
</select>
<%= submit_tag("Search") %>
<% end %>
我可以通过 params[:query]
在控制器中访问 :query
。我希望能够在提交表单时对 options_select_for
的下拉菜单执行相同的操作,即访问 params[:species]
.
我尝试做这样的事情:
<%= :species, options_for_select Species.all.collect{|sp| [sp.name, sp.id]}.insert(0, "Select Species") %>
但 Rails 似乎不喜欢这样做并且 returns 一个错误所以我认为这不是正确的语法。如何访问我的表单中的多个参数值?
这是错误:
Started GET "/proteins/index" for ::1 at 2015-08-21 12:11:52 -0700
Processing by ProteinsController#index as HTML
[]
Rendered proteins/index.erb within layouts/application (2.0ms)
Completed 500 Internal Server Error in 11ms (ActiveRecord: 0.0ms)
SyntaxError (C:/Users/Shams/Documents/Overall/topfind4/topfind4.1/app/views/proteins/index.erb:18: syntax error, unexpected ',', expecting ')'
...utput_buffer.append=( :species, options_for_select Species.a...
... ^):
app/views/proteins/index.erb:18: syntax error, unexpected ',', expecting ')'
我正在使用 Rails 4.2 和 Ruby 2.0.0。
删除您自己的 <select>
标签并尝试使用 rails 这样的方式
<%= select_tag :species, options_for_select(Species.all.collect{|sp| [sp.name, sp.id]}, params[:species]), {prompt: "Select Species"} %>
也许就像上面的评论建议的那样。像这样
在 controller action
的数组中获取您需要的所有物种详细信息
@species_names = Species.pluck(:name, :id) #as per suggestion give in comment below
或
@species_names = Species.all.collect{|sp| [sp.name, sp.id]}
并在视图中像这样使用它
<%= select_tag :species, options_for_select(@species_names, params[:species]), {prompt: "Select Species"} %>
这将是更好的方法。
我有一个表格:
<%= form_tag("index", method: "get") do %>
<%= label_tag(:query, "Search for:") %>
<%= text_field_tag(:query) %>
<select>
<%= options_for_select Species.all.collect{|sp| [sp.name, sp.id]}.insert(0, "Select Species") %>
</select>
<%= submit_tag("Search") %>
<% end %>
我可以通过 params[:query]
在控制器中访问 :query
。我希望能够在提交表单时对 options_select_for
的下拉菜单执行相同的操作,即访问 params[:species]
.
我尝试做这样的事情:
<%= :species, options_for_select Species.all.collect{|sp| [sp.name, sp.id]}.insert(0, "Select Species") %>
但 Rails 似乎不喜欢这样做并且 returns 一个错误所以我认为这不是正确的语法。如何访问我的表单中的多个参数值?
这是错误:
Started GET "/proteins/index" for ::1 at 2015-08-21 12:11:52 -0700
Processing by ProteinsController#index as HTML
[]
Rendered proteins/index.erb within layouts/application (2.0ms)
Completed 500 Internal Server Error in 11ms (ActiveRecord: 0.0ms)
SyntaxError (C:/Users/Shams/Documents/Overall/topfind4/topfind4.1/app/views/proteins/index.erb:18: syntax error, unexpected ',', expecting ')'
...utput_buffer.append=( :species, options_for_select Species.a...
... ^):
app/views/proteins/index.erb:18: syntax error, unexpected ',', expecting ')'
我正在使用 Rails 4.2 和 Ruby 2.0.0。
删除您自己的 <select>
标签并尝试使用 rails 这样的方式
<%= select_tag :species, options_for_select(Species.all.collect{|sp| [sp.name, sp.id]}, params[:species]), {prompt: "Select Species"} %>
也许就像上面的评论建议的那样。像这样
在controller action
的数组中获取您需要的所有物种详细信息
@species_names = Species.pluck(:name, :id) #as per suggestion give in comment below
或
@species_names = Species.all.collect{|sp| [sp.name, sp.id]}
并在视图中像这样使用它
<%= select_tag :species, options_for_select(@species_names, params[:species]), {prompt: "Select Species"} %>
这将是更好的方法。