【发布时间】:2012-09-03 11:32:01
【问题描述】:
我有一个名为 Books 的 ActiveRecord 模型,它在 authors 上具有 has_one 关联,在 publishers 上具有 has_many 关联。所以下面的代码都很好
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 那样简单),我仍然希望能够调用@987654332 @ 就可以了,但是要返回一个DigitalPublishers 的列表,所以我想要我的has_many 关联的一些条件,它首先检查这本书是否是数字的,如果是,使用DigitalPublishers 类而不是@ 987654336@班级。
我尝试使用以下代码使用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。
【问题讨论】:
-
我已经解决了一个类似的多态关系问题(Book has_many publishers [Normal or Digital]),但使用的是 rails 3.0.1。所以我不知道该解决方案是否适用于 rails 2.3
-
你能在这里添加键模型(书籍、作者、出版商)吗?你也在使用接受嵌套属性吗?
标签: ruby-on-rails associations has-many ruby-on-rails-2