我有一个名为 ActiveRecord 的模型Books
,它有一个has_one
关联 onauthors
和一个has_many
关联 on 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。