Ruby on rails 在控制器中创建函数,不保存两个单独的参数

Ruby on rails 在控制器中创建函数,不保存两个单独的参数,ruby-on-rails,forms,tags,params,Ruby On Rails,Forms,Tags,Params,这些是代码 <p> <% form_for @movie do |m| %> <%= m.label :title, 'Title' %>: <%= m.text_field :title %></br> <%= m.label :release_year, 'Release Year' %>: <%= m.select :release_year, (1900..2011) %></br> <

这些是代码

<p>
<% form_for @movie do |m| %>
<%= m.label :title, 'Title' %>:
<%= m.text_field :title %></br>
<%= m.label :release_year, 'Release Year' %>:
<%= m.select :release_year, (1900..2011) %></br>
</br>

<% Movie.genres.each do |genre| %>
    <%=h genre %>
    <%= check_box_tag :genre, genre %></br>
<% end%>
</br>

<%= m.submit "Save" %>

<% end %>
</p>
但无论出于何种原因,我不断收到错误消息,说“未定义的方法‘each_pair’for:genre:Symbol”或“找不到没有ID的电影”。它没有正确地保存

是因为我的提交表单只是电影表单| m |还是因为我在控制器中的创建函数出错

谢谢。

检查Firefox中的Firebug(如果您使用的是Chrome,则检查Chrome开发工具;如果两者都不使用,则检查您的应用程序日志),并查看您的场景中实际传递了哪些参数?听起来您的代码希望收到一个实际未传递的参数。工具/日志应显示故障发生的位置。

可能不是

params[:movie].merge(:genre)
你想做什么

params[:movie].merge(:genre => params[:genre])

感谢您回复正常!你的建议实际上是我如何知道断链在哪里。但我只是不知道如何修理它。只要你把它弄明白。:)这是因为Hash#merge需要另一个Hash作为参数,而您传递的符号本质上是字符串,没有#each#pair方法。当您像这样调用方法:method(:a=>b)时,它会自动解析为method({:a=>b})-参数将是散列
params[:movie].merge(:genre => params[:genre])