缺少Rails :: param或值为空

时间:2014-09-27 11:47:25

标签: ruby-on-rails ruby-on-rails-4

我正在尝试为这些项目添加添加到收藏夹选项。这允许用户将特定项目添加到收藏列表中。但是我得到了这个错误:

param is missing or the value is empty: favorite

收藏控制器中的create方法:

def create
@favorite = Favorite.new(params.require(:favorite).permit(:item_id, :user_id ))
if @favorite.save
  redirect_to @favorite
   flash[:notice] = 'Favorite was successfully created.' 
else
  render 'new'
end
end

项目的视图显示:

<%= link_to 'Add to favorites', {:controller => "favorites", 
                   :action => "create", 
                   :item_id => @item.id, 
                   :user_id => current_user.id},
                   :method => "post" %>

请求(参数):

{ "_method"=>"post", "authenticity_token"=>"Wz1eGNw/3GH9t+aOquT/hu1F27zBSqAx6K6igxoc2VI=", "item_id"=>"27",  "user_id"=>"10"}

URL:

/favorites?item_id=27&user_id=10

1 个答案:

答案 0 :(得分:0)

如果你查看ActionController#permit的文档,看起来这些参数需要嵌套在最喜欢的地方:

(favorite: { item_id: 1, user_id: 1 })

当使用rails形式的帮助器时,例如form_for,这种嵌套会自动完成,但因为你手动传递params in link_to item_id而user_id将直接嵌入params。

This SO answer解释了如何将link_to参数合并到params哈希中。或者,您可以在params.require调用之前将它们合并到控制器中。