と呼ばれる ActiveRecord モデルがBooks
あり、これにはhas_one
関連付けがauthors
あり、has_many
関連付けがありpublishers
ます。したがって、次のコードはすべて適切です
books
.publishers
今、私は別のARモデルを持っています。digital_publishers
これは似ていますが、本の著者が応答した場合に透過的に使用したいと考えてdigital?
います.コードで説明しましょう.
normal_book = Book.find(1)
normal_book.author.digital? #=> false
normal_book.publishers #=> [Publisher1, Publisher2, ...]
digital_book = Book.find(2)
digital_book.digital? #=> true
digital_book.publishers #=> I want to use the DigitalPublishers class here
したがって、本の著者がデジタルである場合 (著者はhas_one :author
関連付けによって設定されるため、books テーブルに SQL 条件を指定して has_many を設定するほど単純ではありません)、それでもそれを呼び出すことができるようにしたいと考えて.publishers
いますが、のリストなDigitalPublishers
ので、has_many
その本がデジタルかどうかを最初に確認し、デジタルである場合は、DigitalPublishers
クラスの代わりにクラスを使用するという関連付けの条件が必要ですPublishers
。
after_find
次のコードを使用してコールバックを使用してみました:
after_find :alias_digital_publisher
def alias_digital_publisher
if self.author.digital?
def publishers
return self.digital_publishers
end
end
end
しかし、これはうまくいかなかったようです。また、Rails 2.3 を使用しています。