0

在此之前我已经发布了一些关于如何向用户添加最喜欢的食谱的帖子。我有一个应用程序,您可以在登录后上传食谱,用户可以在整个表中搜索所有食谱并在会员中查看他们自己的食谱区域..

现在我希望用户能够保存他们最喜欢的食谱,到目前为止我可以保存最喜欢的食谱,我得到的输出是

[#<Favourite id: 1, user_id: 8, recipe_id: nil, created_at: "2012-11-06 19:25:34", updated_at: "2012-11-06 19:25:34">,

所以我得到了正确的 user_id 但没有实际食谱的参数,即菜名、原产国。

我的模型是这样的

用户

class User < ActiveRecord::Base

has_many :recipes 
has_many :favourites

食谱

has_many :ingredients 
has_many :preperations
has_many :favourites

最喜欢的

belongs_to :user
belongs_to :recipe

我最喜欢的控制器看起来像这样

 def create

 @favourite = current_user.favourites.new(params[:recipe])
 if @favourite.save
 redirect_to my_recipes_path, :notice => "Recipe added to Favourites"
 end
end

添加到收藏夹链接

 <%= link_to "Add to favorites",  {:controller => 'favourites', :action => 'create'}, {:method => :post } %>

我希望我没有错过任何东西,任何帮助表示赞赏

4

3 回答 3

3

您需要在链接中添加额外信息并修改创建操作

# View
<%= link_to "Add to favorites",  favorite_path(:recipe_id => @recipe.id), {:method => :post } %>

# Controller
def create
  @favourite = current_user.favourites.new(recipe_id: params[:recipe_id)
  if @favourite.save
   redirect_to my_recipes_path, :notice => "Recipe added to Favourites"
  end
end

问题是您没有向参数中的控制器发送任何内容params[:recipe]

注意:记住attr_accessible :user_id, :recipe_id内部Favorite模型。

于 2012-11-06T20:43:25.123 回答
1

就像声明的那样

<%= link_to "Add to favorites",  favorite_path(:recipe_id => @recipe.id), {:method => :post } %>

但这一切都取决于你的控制器中定义的@recipe - 例如,如果你有

@recipes = Recipie.all

在你的视野中

@recipes.all do |recipe|

然后在您的链接中(在块内),您需要:

<%= link_to "Add to favorites",  favorite_path(:recipe_id => recipe.id), {:method => :post } %>

这有帮助吗?

于 2012-11-07T12:18:17.533 回答
1

您没有通过链接发送任何参数。

<%= link_to "Add to favorites",  {:controller => 'favourites', :action => 'create'}, {:method => :post } %>

这还不足以将食谱添加到收藏夹中。您需要做的是通过配方的 ID 以及此链接:

<%= link_to "Add to favorites",  {:controller => 'favourites', :action => 'create', :recipe_id => recipe.id}, {:method => :post } %>

或者你可以通过使用路由助手来缩短这个时间:

<%= link_to "Add to favorites",  add_to_favorites_path(:recipe_id => recipe), {:method => :post } %>

像这样在你的内部定义路由助手config/routes.rb

post '/favorites' => "favorites#create", :as => "add_to_favorites"

然后只需params[:recipe_id]在控制器内部找到配方并使用它执行您需要执行的操作。

于 2012-11-06T20:45:23.277 回答