我有HABTM型号Client
和Book
。 Client
模型具有一个bookshelf_color属性来指示客户是否拥有一整套书籍,其中一部分是书籍,还是一部分书籍,或者没有任何书籍。一旦书架上的书籍发生变化,回调set_bookshelf_color
应该反映这种变化。回调中的属性赋值不起作用?
问题是为什么我必须在"self."
下面的私人回调中加上bookhelf_color赋值才能使其工作(否则它不会)?
class Client < ActiveRecord::Base
has_and_belongs_to_many :books, autosave: true, uniq: true,
after_add: :set_bookshelf_color, after_remove: :set_bookshelf_color
attr_accessible :id, :book_ids, :bookshelf_color
private
def set_bookshelf_color(book)
if Book.pluck(:abbr).map{|b| books.map(&:abbr).map(&:to_s).include?(b.to_s)}.all?
self.bookshelf_color = "green"
elsif Book.pluck(:abbr).map{|b| books.map(&:abbr).map(&:to_s).include?(b.to_s)}.any?
self.bookshelf_color = "yellow"
else
self.bookshelf_color = "red"
end
end
# /private
end
谢谢,这解释了它 - 起初我看起来很奇怪。 – 2012-03-31 10:39:08