0

我有一个模型叫它Project有很多Proposals.

Project 模型有一个属性叫做winning_proposal_id

现在我有这样的东西来找到获胜的提案以及一个 has_many 提案:

belongs_to :winning_proposal, :class_name => "Proposal", :foreign_key => "winning_proposal_id"
has_many :proposals, dependent: :destroy 

我从中做的:

@project.winning_proposal

参考获胜的提案,但我不是这个的粉丝。

我更喜欢的是这样的:

@project.proposals.winner

我认为它更干净。但是,要做到这一点,我需要能够从块中引用实例变量 wins_proposal_id:

has_many :proposals, dependent: :destroy do
  def winner
    self.where(id: winning_proposal_id).first
  end
end

但这不起作用。我相信我可以做到这一点:

has_many :proposals, dependent: :destroy do
  def winner
    self.where(id: self.project.first.winning_proposal_id).first
  end
end

但这似乎很笨拙。任何人都知道如何从块中引用调用实例变量?

4

1 回答 1

0

为其他感兴趣的人想出来:

has_many :proposals, dependent: :destroy do
 def winner
  self.first(conditions: {id: proxy_association.owner.winning_proposal_id})
 end
end

关键是使用proxy_association.owner来引用父级。

于 2013-04-01T19:03:00.437 回答