1

Users私のアプリケーションは、 、StoriesCompetitionsおよびで作文コンテストをモデル化していますSubmissions

ユーザーは、投稿を通じて、または所有者としてコンテストに参加できます。ユーザーが所有または参加しているすべてのコンテストを返す 1 つのクエリまたはメソッドが必要です。それらを配列として返すメソッドを持っていますが、competitions | owned_competitionsチェーンしたり、スコープを適用したりできるように、それらを ActiveRecord エンティティに保持したいと思います。

それを行う方法、またはこれらの関係をセットアップするためのより良い方法はありますか?

私のモデルは次のようになります。

ユーザー.rb:

has_many :stories
has_many :submissions
has_many :competitions, :through => :submissions
has_many :owned_competitions, :class_name => "Competition"

ストーリー.rb:

belongs_to :user
has_many :submissions
has_many :competitions, :through => :submissions

競争.rb:

belongs_to :owner, :class_name => "User", :foreign_key => 'user_id'
has_many :submissions
has_many :competitors, :through => :submissions, :source => :user
has_many :stories, :through => :submissions

scope :expiring_today, lambda { where("deadline = ?", Date.today) }

提出.rb:

belongs_to :user
belongs_to :story
belongs_to :competition
4

1 に答える 1

1

あなたが望むことは絶対に可能です。実際には、SQL をまったく書かなくてもおそらく可能ですが、正確な方法はわかりません。

これが私が思いついたものです:

Competition.joins('left join submissions on submissions.competition_id = competitions.id').where('competitions.user_id = :uid OR submissions.user_id = :uid', :uid => user)

(デフォルトの内部結合ではなく) 左結合を使用して、ユーザーが所有しているがまだ提出されていないコンテストを引き続き返すことができるようにします。

于 2012-10-16T18:47:23.773 に答える