扩展has_many时引用调用实例变量

时间:2013-04-01 17:38:42

标签: ruby-on-rails has-many model-associations rails-models

我有一个名为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

我觉得它更干净。但是,为此,我需要能够在块中引用实例变量winning_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

但这看起来很糟糕。任何人都知道如何从块中引用调用实例变量?

1 个答案:

答案 0 :(得分:0)

想出其他感兴趣的人:

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

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