2014-01-08 1 views
0
레일에있는

3 개의 사용자 : 사용자, 이벤트가 있습니다. 사용자 has_many는 events_staffs를 통해 이벤트를 처리하고 has_many는 events_staffs를 통해 이벤트를 처리합니다.레일 3 테이블이없는 연관

class Staff < ActiveRecord::Base 
    has_many :events_staffs 
    has_many :events, through: :events_staffs 
end 

class Event < ActiveRecord::Base 
    has_many :events_staffs, dependent: :destroy 
    has_many :staffs, through: :events_staffs 
end 

내가 이벤트가 저자와 저자 및 회원들이 직원 테이블의 기록 일부 회원을 가지고 바랍니다. 나는이 같은 콘솔 뭔가를 할 수 있으면 좋겠다 :

e=Event.first #ok it works 
e.author=Staff.first 
e.members=Staff.all - [Staff.first] 

그것을 할 수 있습니까?

솔루션

#Event model 
    has_many :events_staffs, dependent: :destroy 
    has_many :members, through: :events_staffs, source: :staff #http://stackoverflow.com/a/4632456/1066183 

    #http://stackoverflow.com/a/13611537/1066183 
    belongs_to :author,class_name: 'Staff' 


#migration: 
class AddForeignKeyToEventsTable < ActiveRecord::Migration 
    def change 
    change_table :events do |t| 
     t.integer :author_id 
    end 
    end 
end 
+0

예, 작성자, 회원 등의 관계를 설명했습니다. –

답변

1

예, 아주 쉽게. 다음과 같이 코드를 업데이트하여 Event 모델에 author_id 정수 열을 추가

class Event < ActiveRecord::Base 
    has_many :events_staffs, dependent: :destroy 
    has_many :staffs, through: :events_staffs 

    belongs_to :author, class_name: 'Staff' 
end 

회원에 관해서는, 나는 또 다른 당신의 staffs_events 테이블과 유사한 테이블을 조인 만들 수 있지만 구성원에 대한 것입니다. 이 모델 내에서 member와 class_name을 지정하는 Event와 동일한 belongs_to 연관을 수행해야합니다.

+0

감사합니다. 솔루션을 사용할 수는 있지만 데이터베이스를 편집하지 않아도됩니까? – user1066183

+0

아니요 - 참조하려는 작성자의 ID를 추적하려면 새 열이 필요합니다. – Jon