2012-02-13 6 views
8

私はRailscapeのNestedフォームと複雑なフォームのエピソードをフォローしています。単一のフォームで複数のモデルを作成するときに、バッチモデルでネストされたサンプルモデルのレコードを編集、更新、削除、作成することができました。param 'samples'のハッシュ(got array)

私は長年頭を痛めていましたが、この問題を解決するための正しい解決策も得られませんでした。

開発ログファイルに次のエラーが表示されます。

エラーメッセージ:私のモデルは同じが含まれてい

<%= form_for @batch do |f| %> 
...... 
<%= f.fields_for :samples do |s_form| %> 
.... s_form things 
<% end %> 
<% end %> 

:私のコントローラで

Status: 500 Internal Server Error 
    expected Hash (got Array) for param `samples' 

私はこの

def update 
    @batch = Batch.find(params[:id]) 

    respond_to do |format| 
     if @batch.update_attributes(params[:batch]) 
     flash[:notice] = 'Successfully updated Batch.' 
     format.html { redirect_to(@batch) } 
     format.xml { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @batch.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

などの更新アクションを持っている私の見解では、このようなものですもの:

has_many :samples, :dependent => :destroy 

    accepts_nested_attributes_for :samples, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true 

すべての提案をいただければ幸いです。

+0

私は自分のフォームで 'text_field_tag'を使用しているとき、私はRailsの3を実行していたとき、私はRailsの-2形式の引数を与えているため、同様の問題に遭遇したあなた自身がすべてであることをやって参照していますか?もしそうでなければ、全体像を提供できますか? (maybe on pastie.org) – JellicleCat

+0

文字列の配列にいくつかのnull要素が含まれていたときにこのエラーメッセージが表示されました。 –

答えて

3

私は同じ問題を抱え、それを修正しました。

リクエストのヘッダーを確認してください。私は見ました:

weight[2][name]:Tests 
weight[2][value]:75 
weight[1][name]:Quizzes 
weight[1][value]:25 
weight[][name]:Foo 
weight[][value]: 

これは問題を引き起こした最後の2つでした。私の場合は、エラーを取り除くためにこの重みにIDを与えなければなりませんでした。同じ問題に会った他の人のため

13

あなたのようなフォームで二つのフィールドを持っている場合、このエラーが発生した:

video: 'some string' 
video['url']: 'some url' 

その後、レールがエラーでクラッシュします:期待ハッシュ(だ文字列)for param

ソリューションは非常にシンプルです: 'ビデオ'を別のものに変更してください。例えば:

video_origin_url: 'some string' 
video['url']: 'some url' 
+1

これは非常に役に立ちます。レール3.2にはこれ以上記述的な誤りがないことは私にとっては奇妙なことです。 – thekingoftruth

関連する問題