私は、プロジェクトとプロジェクトに関連付けられたチケットを持つプロジェクト管理システムを構築している書籍(Rails 3 in Action)を読んでいます。彼らがコメントをするとき、彼らはまた、チケットの状態(新しい、仕上がりなど)を示すことができます。コメントフォームを提出しながらrails:モデル間の関連付けで「自己」を使用
ユーザーは、チケットの状態を選択して、この状態は何とかもTicket.rbモデルに反映されなければならないので、フォームがサブミットされた後、著者は、コールバックを使用
after_create :set_ticket_state
また、Ticketオブジェクトに状態を設定するCommentクラスにあります。
私の質問は、このコールバックメソッドのコードに関連しています。彼は、コメントクラスを参照する「自己」と
self.state
を書く理由を私は理解して、彼はチケットオブジェクトを更新しようとしているならば、彼は「自己として、
self.ticket.state
を使用して、なぜ私は理解していません"は依然として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
多分私は分かりません。私が本当に求めていたのは、Commentクラスで、「self」を使ってTicketオブジェクトを参照することができた方法です。私は "自己"は常にそれが参照されたクラスを参照したと思ったが、彼がTicketオブジェクトを更新する必要があれば、何とかTicketを使用しなければならないだろうか? – Leahcim
'self'はコメントで、' self.ticket'はそのチケットです。 'self.ticket.state'はコメントのチケットの状態です。 – rkb
ありがとう、これはbelongs_toのためにのみ可能です:チケット、そうですか? – Leahcim