2012-01-22 40 views
0

我正在閱讀一本書(Rails 3 in Action),它構建了一個項目管理系統,其中包含項目,然後是與項目相關的票證,用戶可以對票據進行評論,並且當他們發表評論時,他們還可以指示機票的狀態(新的,完成的等)。rails:在模型之間的關聯中使用「self」

的用戶選擇票的狀態,而提交評論的形式,並且該國以某種方式也可以在Ticket.rb模型反映,所以在表單提交後,筆者使用了回調

after_create :set_ticket_state 

在評論類,這也將把狀態的票證對象

我的問題涉及到這個回調方法中的代碼。我明白他爲什麼寫

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

評論屬於的狀態以及故障單所屬的狀態是兩個單獨的對象或數據庫中的行。該行代碼的要點是引用故障單的狀態,並相應地更新狀態。如果您只是使用self.state,那麼您只需更改評論的狀態。

+0

也許我不明白。我真正要問的是,在Comment類中,他能夠使用「self」來引用Ticket對象。我認爲「自我」總是指代被引用的類,但是如果他需要更新Ticket對象,那麼他是不是必須以某種方式使用Ticket? – Leahcim

+0

'self'是一個Comment,'self.ticket'是它的Ticket,所以'self.ticket.state'是Comment的Ticket的狀態。 – rkb

+0

謝謝,所以這是唯一可能的,因爲belongs_to:ticket,對吧? – Leahcim