2017-02-22 13 views
0

私のモデルには、適切なActiveRecordの関連付けがどのようなものかを把握しようとしています。私はユーザーアイテムの数から選択し、食事を構築し、単一注文のために、この複数回繰り返すことができ、ウェブサイトのための食事のカスタマイズやオーダリングシステムを構築しています。ユーザー、注文、食事、アイテムとそのActiveRecordの関連付け

ユーザー

has_many :orders, :dependent => :destroy 
has_many :meals, through: :orders 

注文

belongs_to :user 
has_and_belongs_to_many :meals 

食事

012:

私の現在の設定は以下の通りです

私は私の質問は2つの部分に来ると仮定項目

has_and_belongs_to_many :meals 

1)私の現在の設定は、単一の食事に割り当てられる複数のアイテムのために認めていません、そしておそらくへ単一の注文のための他の食事。

2)新しい注文をするときに、ユーザーの以前の食事にアクセスしてショートカットを提供できるようになりますか?

初めて質問の質問者から事前に束をありがとう!

答えて

0

あなたの最初の質問には、食事とアイテムの間に多対多の関係が設定されていることです(データベースの名前も正しく指定されていると仮定します)。

あなたの2番目の質問には、アクティブなレコードがマルチレイヤークエリを実行するように設定されているかどうかわからないため、カスタムクエリーをライトする必要があります(つまり、すべての食事を特定のユーザーのすべての注文)。

past_meals = Set.new

users.orders.each {|o| past_meals += o.meals}のようなものは確かに動作しますが、あなたがそれを必要に応じて、はるかに効率的にすることができました。

しかし、has_many_and_belongs_toがあなたの行っていることに対して機能しても、使用することはお勧めしません。コミュニティは、それとhas_many_through関係を持つ結合テーブルを作るほうがはるかに有利です。

あなたは決してそれをする必要はありませんが、ほとんどの人がそれを提案し、あなたの仕事を節約することができます。

関連する問題