1

我的应用程序模拟了一个写作比赛,使用UsersStories和.CompetitionsSubmissions

用户可以通过提交或作为所有者参与比赛。我想要一个返回用户拥有或参与的所有比赛的查询或方法。我有一个方法将它们作为数组返回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 回答