2011-06-27 7 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 'for:genre:Symbol"または "IDなしのムービーを見つけることができません"。それは適切に保存されていません。

私の提出書式はムービー形式のみですので| m |それともコントローラの作成機能が間違っているからですか?

ありがとうございました。

答えて

1

は、おそらく代わりに

params[:movie].merge(:genre) 

のあなたは

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

をやってみたかったですか?

+0

ありがとう!それはうまくいった。なぜそれが説明できますか?ありがとう! – noob

+1

これは、Hash#mergeが別のハッシュを引数として期待し、基本的に文字列で#each_pairメソッドを持たないシンボルを渡すためです。メソッド(:a => b)メソッド({:a => b})として自動的に解析されます - 引数はハッシュ – keymone

+0

ああです。どうもありがとう! – noob

0

FirefoxのFirebug(Chromeを使用している場合はChromeデベロッパーツール、どちらも使用していない場合はアプリログ)をチェックし、シナリオで実際に渡されているパラメータを確認します。あなたのコードが実際に渡されていないパラメータを受け取ることを期待しているような音がします。ツール/ログは、故障がどこで起きているかを明らかにする必要があります。

+0

Normalocityにお返事いただきありがとうございます。あなたの提案は、実際に私が壊れたチェーンがどこにあるかをどのように認識したかです。しかし、私はちょうどそれを修復する方法を知らなかった。 – noob

+0

あなたが理解した限り、 :) – jefflunt

関連する問題