2012-01-22 3 views
0

프로젝트가있는 프로젝트 관리 시스템을 구축하고 프로젝트와 관련된 티켓을 사용자가 볼 수있는 책 (Rails 3 in action)을 읽었으며 사용자는 티켓에 대한 의견을 작성할 수 있습니다 코멘트를 작성하면 티켓의 주 (신규, 완료 등)를 나타낼 수도 있습니다. 코멘트 양식을 제출하면서rails : 모델 간의 연관에 "self"사용

사용자가 티켓의 상태를 선택하고이 상태는 어떻게 든 또한 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

주석이 속한 상태와 티켓이 속한 상태는 두 개의 개별 객체 또는 데이터베이스의 행입니다. 해당 코드 행의 요점은 티켓의 상태를 참조하고 그에 따라 상태를 업데이트하는 것입니다. self.state을 사용하는 경우 댓글의 상태 만 변경됩니다.

+0

아마도 내가 이해하지 못합니다. 내가 정말로 묻는 것은 Comment 클래스에서 "self"를 사용하여 Ticket 객체를 참조 할 수 있었던 방법입니다. 나는 "self"가 항상 참조 된 클래스를 참조했다고 생각했지만 Ticket 객체를 업데이트해야한다면 어떻게 든 Ticket을 사용해야 할 것인가? – Leahcim

+0

'self'는 주석이고,'self.ticket'는 티켓입니다. 그래서'self.ticket.state'는 코멘트 티켓의 상태입니다. – rkb

+0

감사합니다. 그래서 이것은 belongs_to : ticket 때문에 가능합니다. 맞습니까? – Leahcim