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

私はそれがよりきれいだと思います。ただし、これを行うには、ブロック内からインスタンス変数 wining_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 に答える