我想将wishlist
的ID保存在wishlist_entry
列中的wishlist_id
表中。
我有一个像这样的link_to元素:
<%= link_to 'Create', new_wishlist_entry_path(:wishlist => @wishlist.id) %>
这给了我以下网址:
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
的{{1}}字段中保存新愿望清单的ID?
答案 0 :(得分:1)
我认为问题是愿望清单ID是在params [:wishlist]而不是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]
)
答案 1 :(得分:0)
如果不确切知道你在这里尝试做什么,看起来问题是wishlist_id没有传递给你的创建动作。
解决此问题的最佳方法是利用您已通过更改
设置的嵌套资源<%= link_to 'Create', new_wishlist_entry_path(:wishlist => @wishlist.id) %>
到
<%= link_to 'Create', new_wishlist_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])