2011-01-12 6 views
1

私は読んでいます: Rails: Pass parameters with render :action?しかし、私はまだ問題があります。Rails 3 Render =>パラメータ付きで新規作成

私の新しいページのURLは:http://localhost:3000/submit?category_id=2です。最初にフォームを送信するのは問題なく動作しますが、作成が失敗し、コントローラが新しいページをレンダリングすると、エラーが発生し、パラメータが渡されないためidなしのカテゴリは見つかりません。

はここnew.html.erbのショートバージョンだと新しい/コントローラ

def new 
    ... 
    @category = params[:category_id] 
    @title = "Submit a review" 
    end 

    def create 
    .... 
    if @review.save 
     flash[:success] = "New a Created" 
     redirect_to user_path(@user) 
    else 
     @title = "New Review" 
     render :action => 'new', :category_id => @category  
    end 
    end 

を作成する1行目以下の私にエラーを与えています。

<h1>Blah, blah, blah<%= "best #{Category.find(@category).name}" %></h1> 
<br /> 
<%= form_for(...) do |f| %> 
    <%= render 'shared/error_messages', :object => f.object %> 
    <tr> 
    <td> <%= select_tag(... %></td> 
    <td><%= collection_select(...) %><br /> %></td> 
    <td><%= f.text_field ... %></td> 
    </tr> 
</table> 
     <%= f.hidden_field :category_id, :value=>@category %> 
<div class="actions"> 
     <%= f.submit "Add" %> 
</div> 
<% end %> 

助けてください。私は何時間もサークルに行ってきました。

答えて

1

私はあなたの '作成'メソッドのelse節はおおよそあなたのparamsハッシュから@categoryにデータを移入することを意味する '新しい'方法を反映する必要があると思います。

まず、隠しフィールドが入力されていることを確認してから、フォームが送信されたらparamsの内容を確認してください。 category_idがあるはずです。保存が失敗した場合は、「新規」で行ったように再度取得する必要があります。

+0

ありがとうございました。私は@categoryをelse文に移動しました。@category変数が環境コントローラの作成コントローラでnilでないことがわかりました。 ただし、値はまだレンダリングを通過せず、エラーメッセージは同じままです。他のアイデア? – John

+0

更新:すべてをもう一度再入力した後。新しいパラメータは正しいが、elseレンダリングではパラメータは@category = [:review] [:category_id]でなければならない。ご協力ありがとうございました。 – John

+0

おっと、私たちのコメントは交錯しました。それがうまくいくと聞いてよかったです。 –

関連する問題