2012-02-28 4 views
0

아마도이 간단한 대답은 있지만 잃어 버렸을 것입니다.보기에 다형성 연관 표시

오늘 활동 필드를 만들려면 첫 번째 다형성 협회를 만들었습니다. 여기

가 activity.rb의 : 활동에 대한 데이터베이스에서

class Activity < ActiveRecord::Base 

    belongs_to :trackable, :polymorphic => true 

end 

, 나는 열이 : 여기

id 
name 
trackable_id 
trackable_type 
created_at 
updated_at 

는 note.rb입니다 :에서

class Note < ActiveRecord::Base 

    has_many :activities, :as => :trackable 

    after_create :create_an_activity 

    def create_an_activity 
    self.activities.build(:name => candidate_id) 
    end 

end 

내 index.html.erb보기 내가 가지고있는 것 :

<% @activities.each do |activity| %> 
    <p>activity.name</p> 
<% end > 

내 질문은 : 이름 => candidate_id을 : 내가 가지고 있기 때문에

는 현재 뷰에서 activity.name는 ID를 출력한다. 후보자에 대한 메모가 생성됩니다. 하지만 실제로 출력하기를 원하는 것은 candid.full_name (후보 테이블에 있음)입니다. 그러나 full_name이 notes 테이블에 없으므로이 작업이 수행되지 않습니다. 그것은 후보자 테이블에 있습니다. 거기에 접근 할 수있는 방법이 있습니까? 후보자는 has_many 노트를 가지고 있으며, 노트는 후보로 속한다.

답변

2

몇 달 전에 Vin과 기술 공유를 즐겼습니다!

난 당신이 전화 자체에 의해, 부모 협회를 통해 이동하여 액세스 할 수 있습니다 무엇을 찾고 있는지 생각 -> 부모 -> 속성 :

def create_an_activity 
    self.activities.create(:name => self.candidate.full_name) 
end 
또한

내가 틀렸다면 정정 해줘,하지만하지 않는 한 나중에 save를 호출하면 self.activities.create가 .build 대신 찾고자하는 것입니다.

+0

감사합니다. 그게 효과가 있었어! 나는 그것을 시도했다 : name => candidate.full_name,하지만 그것은 작동하지 않았다. 나는 .self를 포함하는 것을 잊었다. 나 한테 바보. 한가지 이상한 점은 .build가 .create보다는 잘 작동한다는 것입니다. 왜 그런지 궁금해? (P.S. 친절한 말로 감사드립니다.) –

+0

흠, 매우 흥미 롭습니다. 몽고이드를 사용하고 있습니다. 아마도 액티브 레코드와 약간 다르게 작동합니다. 너무 길었습니다. 네가 그걸 알면 내가 알고 싶어 할거야. –