模型的参数没有返回轨道3

时间:2012-11-06 20:24:51

标签: ruby-on-rails-3

我在此之前发了几篇关于如何向用户添加喜欢的食谱的帖子..我有一个应用程序,您可以在登录后上传食谱,用户可以在整个餐桌上搜索所有食谱并查看自己的食谱在会员区..

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

[#<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 } %>

我希望我没有错过任何任何帮助,

3 个答案:

答案 0 :(得分: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

问题是你在param params[:recipe]

中没有向控制器发送任何内容

注意:请记住attr_accessible :user_id, :recipe_id模型中的Favorite

答案 1 :(得分: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]的食谱,然后做你需要做的事情。

答案 2 :(得分: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 } %>

这有帮助吗?