Я читаю книгу (Rails 3 in Action), в которой строится система управления проектами, в которой есть Проекты, а затем Билеты, связанные с проектами, и пользователи могут делать комментарии к тикетам, а когда они делают комментарий, они также могут укажите состояние (новый, законченный и т. д.) Билета.
Пользователи выбирают состояние заявки при отправке формы комментария, и это состояние должно как-то также отражаться в модели Ticket.rb, поэтому после отправки формы автор использует обратный вызов
after_create :set_ticket_state
в классе Comment, который также помещает состояние в объект Ticket
Мой вопрос касается кода в этом методе обратного вызова. Я понимаю, почему он пишет
self.state
со словом "self", ссылающимся на класс комментариев, но я не понимаю, почему он использует
self.ticket.state
если он пытается обновить объект Ticket, так как "self" все равно будет ссылаться на класс Comment.
Я предполагаю, что он может сделать это таким образом из-за ассоциации
belongs_to :ticket
но это всего лишь предположение, и я хотел бы получить больше объяснений, если это возможно.
class Comment < ActiveRecord::Base
after_create :set_ticket_state
belongs_to :ticket
belongs_to :user
belongs_to :state
validates :text, :presence => true
delegate :project, :to => :ticket
private
def set_ticket_state
self.ticket.state = self.state
self.ticket.save!
end
end