2012-02-10 8 views
2

wishlist_entryテーブルのwishlistのIDをwishlist_idのような列に保存したいとします。 私はこのようなのlink_to要素を持っている:新しいwishlistのidを `wishlist_entry`の` wishlist_id`フィールドに保存するにはどうしたらいいですか?

<%= link_to 'Create', new_wishlist_entry_path(:wishlist => @wishlist.id) %> 

これは私に次のURLを与える:

http://localhost:3000/wishlist_entries/new?wishlist=36 

wishlist_entry_controllerのnewアクションは次のとおりです。

def new 
    @wishlist_entry = WishlistEntry.new 
    @wishlist = Wishlist.find(params[:wishlist]) 
    respond_to do |format| 
    format.html # new.html.erb 
    format.json { render json: @wishlist_entry } 
    end 
end 

アクションを作成するには、次のとおりです。

def create 
@wishlist_entry = WishlistEntry.new(
    :wishlist_id => Wishlist.find(params[:id]), 
    :entry_name => params[:wishlist_entry][:entry_name], 
    :description => params[wishlist_entry][:description] 
) 
Couldn't find Wishlist without an ID 
app/controllers/wishlist_entries_controller.rb:44:in `create' 

エラーがリンクである:いただきまし間違っ

:wishlist_id => Wishlist.find(params[:id]), 

私はこのエラーを取得しますか?フィールドwishlist_idの新しいウィッシュリストのIDをwishlist_entryに保存するにはどうすればよいですか?

+0

私のルート:

はこれを試してみてください。ウィッシュリスト 資源:wishlist_entries 資源:登録 資源:wishlist_entries 最後 ルート::=> '歓迎#インデックス' へのウィッシュリストは リソースを行うRBはそう '得る "歓迎/インデックス"' リソースを検索します end' – amarradi

+0

エラー画面では、作成アクションに送信されたパラメータをダンプする必要があります。彼らは何ですか? –

+0

"wishlist_entry" => {"wishlist_id" => ""、 " " "entry_name" => "vvcv"、 " " "description" => "CXVX"}、「 」「コミット」= "ウィッシュリストエントリを作成する"} '' 'wishlist_entry" => {"wishlist_id" => "" 'ウィッシュリストのIDを保存する必要がありますか? – amarradi

答えて

0

あなたがここで何をしようとしているかを正確に知らなければ、wishlist_idが作成アクションに渡されないという問題があるように見えます。

この問題を解決する最良の方法は、あなたがすでに

<%= link_to 'Create', new_wishlist_wishlist_entry_path(:wishlist => @wishlist.id) %> 

<%= link_to 'Create', new_wishlist_entry_path(:wishlist => @wishlist.id) %> 

を変更することにより、設定したネストされたリソースを利用することである(wishlist_wishlist_entryかなり悪いように見えますが、あなたができます:as => 'whatever'in your routesを使用して変更してください)

次に、新しい操作で:

フォームで
@wishlist = Wishlist.find(params[:wishlist_id]) 

form_for([@wishlist, @wishlist_entry]) 

そして、あなたのアクションを作成中:

@wishlist = Wishlist.find(params[:wishlist_id]) 
@wishlist_entry = @wishlist.wishlist_entries.build(params[:wishlist_entry]) 
+0

これはエラーを起こさない同じです... ここで何をしたいのか説明しようとしています 最初に私はウィッシュリストの作成アクションを持っています。ユーザーはそれを作成することができます。作成後、彼女は新しいリストに1つ以上の希望を加えることができます。 私の夢のワークフローはそうです。あなたはあなたのウィッシュリストを作成するサイトに来ました。名前、電子メール、説明を入力した後、あなたの希望を直接リストに追加することができます。 Optinなし、パスワードなし – amarradi

+0

これが初めて実行されたとき。 [:ウィッシュリスト] ' – amarradi

+0

そしてshow.htm.erbこのリンク は' <%=のlink_to '作成' しているwishlist_entry
'@wishlist_entry = WishlistEntry.new' '@wishlist_entry.wishlist_id =のparamsの新しいアクション、new_wishlist_entry_path(:wishlist => @ wishlist.id)%> | ' – amarradi

1

私はこの問題は、ウィッシュリストのidがのparamsに来ているということだと思う[:ウィッシュリスト]ではないのparams [ :id]。あなたのコントローラで表示されているエラーは、params [:id]がnilであり、WishlistクラスがWishlist.find(nil)で何をするかを知らないためです。

def create 
    @wishlist_entry = WishlistEntry.new(
    :wishlist_id => params[:wishlist]), 
    :entry_name => params[:wishlist_entry][:entry_name], 
    :description => params[wishlist_entry][:description] 
) 
関連する問題