2012-01-22 30 views
0

私は、プロジェクトとプロジェクトに関連付けられたチケットを持つプロジェクト管理システムを構築している書籍(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 

答えて

0

コメントが属する状態とチケットが所属する状態は、データベース内の2つの別々のオブジェクトまたは行です。そのコード行のポイントは、チケットの状態を参照し、それに応じて状態を更新することです。 self.stateを使用している場合は、コメントの状態を変更するだけです。

+0

多分私は分かりません。私が本当に求めていたのは、Commentクラスで、「self」を使ってTicketオブジェクトを参照することができた方法です。私は "自己"は常にそれが参照されたクラスを参照したと思ったが、彼がTicketオブジェクトを更新する必要があれば、何とかTicketを使用しなければならないだろうか? – Leahcim

+0

'self'はコメントで、' self.ticket'はそのチケットです。 'self.ticket.state'はコメントのチケットの状態です。 – rkb

+0

ありがとう、これはbelongs_toのためにのみ可能です:チケット、そうですか? – Leahcim

関連する問題