2つの別々の多数の関連テーブルを使用して必要なデータを取得するのに問題があります。2つの別個のhas_manyテーブル
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :meals
has_many :lists
end
class Meal < ActiveRecord::Base
belongs_to :user
has_many :meal_lists
has_many :lists, through: :meal_lists
has_many :meal_ingredients
has_many :ingredients, through: :meal_ingredients
end
class List < ActiveRecord::Base
has_many :meal_lists
has_many :meals, through: :meal_lists
belongs_to :user
end
class MealList < ActiveRecord::Base
belongs_to :meal
belongs_to :list
end
私の最終結果は、list_idとuser_idの両方に関連付けられているすべての食事を引き出すことができます。
は、これまでのところ、私は両方のuser_idとLIST_IDに関連付けられている食事を引き出す方法を見つけ出すように見えることはできません
@list = @user.lists.create("name: "users list")
list.meals.create(name:"List name", user_id: user.id)
list.meals.where(user_id: user.id)
を試してみました。
編集:最初の答えを読んだ後、ここで私はそれをどのように実装するかを解釈しました。私はまだレールを学ぶ冒頭であり、私はこの問題を何時間も見つめており、私はもっと不明瞭に見えます。
私はモデル内でメソッドを作成しました:
Class List < ActiveRecord::Base
def self.find_user_meals(user, list)
meal = Meal.joins(:meal_lists)
user_meal = meal.where(user: user)
list_meal = user_meal.where(meal_lists: { list: list })
return list_meal.distinct
end
end
と私のコントローラ内:
def edit
@list = List.find(params[:id])
user = current_user
@meals = Meal.all
@all_user_meals = List.find_user_meals(user, @list)
end
そして私はちょうど@all_user_mealsを反復処理する点で好ましいです。私はちょっとしたことをジョイントに読んで、最初の答えの後に含めて、コンソールの中で何かを動作させるように思えました。これは、アプリケーションではあまり働いていない、と私はちょうどそれの周りに私の頭を少し包み込むことを試みている。
DOUBLE EDIT:
だから、私はちょうど疲れていたし、問題をoverthinking推測します。私が気付かなかったのは、リストが1人のユーザによって作成されたので、これをかなり簡単に解決することができたということでした。
def edit
@list = List.find(params[:id])
user = current_user
@meals = Meal.all.where(user_id: user.id)
@listed_meals = @list.meals
end
私はこれにどれくらいの時間を費やしたのでしょうか。これを見て時間を費やしてくれてありがとう。時には団体が私を混乱させることもあります。
感謝の間の結合を使用してそれを行うことができます。私はちょっと混乱しているので、それがどのように実装されているかという質問でコメントを編集しました。 –
それを考え出した。助けてくれてありがとう! –