2011-06-27 16 views
0

創建功能,這些都是代碼在控制器不保存兩個不同的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> 
</br> 

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

<%= m.submit "Save" %> 

<% end %> 
</p> 

和我的控制器代碼:

def create 
@movie = Movie.new(params[:movie].merge(:genre)) 
if @movie.save! 
    render show_path 
else 
    render new_path 
end 

但不管是什麼原因,我不斷收到錯誤信息,說「未定義方法`each_pair'用於:流派:符號「或」無法找到沒有ID的電影「。它沒有正確保存。

是因爲我的提交表單只是電影表格| m |或者是因爲我在控制器中的創建功能是錯誤的?

謝謝。在Firefox

回答

1

也許代替

params[:movie].merge(:genre) 

你想要做

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

+0

謝謝!這工作。你能解釋一下爲什麼嗎?謝謝! – noob

+1

這是因爲哈希#合併需要另一個散列作爲參數,並且您傳遞的是基本上是字符串的符號,並且沒有#each_pair方法。當調用方法是這樣的:方法(:A => B)它是自動解析爲方法({:A => B}) - 參數將是散列 – keymone

+0

啊,我看到。非常感謝! – noob

0

檢查Firebug的,看看有什麼實際上正在您的方案傳遞的參數(或Chrome開發人員工具,如果你,如果你正在使用既不使用Chrome,或者你的應用程序日誌)?聽起來就像你的代碼期望接收一個實際上沒有被傳遞的參數。工具/日誌應該顯示故障發生的位置。

+0

感謝您回答普通話!你的建議實際上是我如何發現斷鏈的地方。但我只是不知道如何修復它。 – noob

+0

只要你明白了。 :) – jefflunt

相關問題