協会を通じて:これはさえにhas_manyをすべきですか?
-
23-09-2019 - |
質問
ユーザー、およびユーザーhas_manyの投稿belongs_toのAポスト。
また、トピックbelongs_toのAポスト、およびトピックhas_manyの記事ます。
class User < ActiveRecord::Base
has_many :posts
end
class Topic < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
belongs_to :topic
end
はかなりシンプルだし、非常に簡単にセットアップするために、私はトピックを表示するとき、私はそのトピックの投稿のすべてをしたい、だけでなく、ポストことuser_nameとユーザーのuser_photoをしたことはないまあ、。しかし、これらの属性は、Userモデルに保存され、トピックに縛られていません。だから私は、それまでの設定についてどのように行くか?
Postモデルは、2つの外部キー、トピックのためのユーザーのために1つずつを持っているので、多分それはすでにと呼ばれることができますか?
または、多分これはassiociationから「一方通行」にhas_manyのいくつかの並べ替えです。ポストは、モデルに参加されるだろう、とトピックはHAS_MANYますように:ユーザー、:=>を通じて:投稿。しかし、これの逆は真ではありません。ユーザーが行うようにしないにhas_many:トピック
関連かかわら:だから、has_manyのことには、このさえ必要がでしょうか?私は、コントローラは、ポストとギブトピックについてそのポストのユーザーの両方を呼び出すためにどのようになるかについて混乱してほんの少しだと思います。
編集:真剣に計量していることすべてに感謝、私は私のコントローラのための彼のコードを使用するので、私はTALの答えを選びました;。しかし、私は同じように簡単に選択している可能性のいずれかJ。のか、ティムの代わりに。同様にあなたの両方をありがとうございます。これは、実装がとても気に簡単でした。私は今日は、レールと私の恋愛の始まりをマークするかもしれないと思う。
解決
さて、たとえば、あなたのような何かを行うことができます(テストしていないが、動作するはずです):
@posts = topic.posts.all(:include => :user)
それはすべての記事に対して1つの要求を生成し、ユーザー用、およびポストのコレクションは、ユーザーが持つべき必要があります。
(ここではHAML)ビュー内の
- @posts.each do |post|
= post.user.name
= post.body
他のヒント
トピックとその投稿を表示するときに、あなたがuser_name
とuser_photo
を取得することができます...
のような何かます:
@topic.posts.each do |post|
user_name = post.user.name
user_photo = post.user.photo
end
それは簡単です。申し訳ありませんが私は非常によくあなたの質問を理解していない場合ます。
、いいえ、has_manyの:協会を通じてはここでは必要ありません。
。あなたがトピックに投稿されたすべてのユーザー(ポスト情報をスキップ)のリストを表示したい場合は、それが役立つだろう。
あなたは+ nは1つのクエリを防ぐために、かかわらず、熱心な負荷への投稿からユーザーをお勧めします。