以 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"} %>

这将是更好的方法。