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",  {: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 に答える
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 に答える