рельсы: использование «я» в ассоциациях между моделями - PullRequest
0 голосов
/ 22 января 2012

Я читаю книгу (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

1 Ответ

0 голосов
/ 22 января 2012

Состояние, к которому принадлежит комментарий, и состояние, к которому относится заявка, - это два отдельных объекта или строки в базе данных.Смысл этой строки кода в том, чтобы ссылаться на состояние заявки и соответственно обновлять ее состояние.Если вы просто используете self.state, то вы просто измените состояние комментария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...