【发布时间】:2013-04-01 17:38:42
【问题描述】:
我有一个名为 Project 的模型,它有很多 Proposals.
项目模型有一个名为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
但这似乎很笨拙。任何人都知道如何从块中引用调用实例变量?
【问题讨论】:
-
有趣。这可能是口味问题,但我更喜欢@project.winning_proposal 方式。它具有遵循得墨忒耳法则en.wikipedia.org/wiki/Law_of_Demeter 的额外优势
-
是的。我只是找到这个清洁剂。使执行 project.proposals.winner 和 project.proposals.loser 之类的事情变得更容易`
标签: ruby-on-rails has-many model-associations rails-models