У меня есть модели HABTM Client
и Book
. Модель Client
имеет атрибут bookshelf_color, чтобы указать, есть ли у клиента полный набор книг, часть из них или ни одна из них. Как только книги на книжной полке меняются, обратный вызов set_bookshelf_color
должен отражать изменение.Назначение атрибутов в обратном вызове не работает?
Вопрос в том, почему у меня есть префикс назначения bookshelf_color в частном обратном вызове ниже с "self."
, чтобы заставить его работать (как это не иначе)?
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
Спасибо, это объясняет - сначала это выглядело странно. –