2016-12-02 73 views
1

我已經看遍了,找不到任何東西(可能導致它不可能)Rails模型可以有一組關聯嗎?

我有一個會議模型和語言模型(它有一個名爲語言的字符串列)。每次會議都有2種語言。

是否有一種方法,使關聯,如: 導軌克遷移AddLanguageToMeetings語言:參考

,然後存儲的2個language_ids在參考陣列?

例如,Meeting.language_id = [1,2]

然後能夠調用的語言,如:

meeting.language_id[0].language

哪有我本身了這個協會?我是否需要爲每個關聯的ID分配2個不同的列?

謝謝!

+0

NO。你不能通過ID數組關聯。..幾種方法來做到這一點:'has_many:通過,belongs_to:通過'或'has_and_belongs_to_many',這取決於你的用例.. [閱讀](http:// guides。 rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many) – sa77

回答

1

您所描述的是has_many,其中外鍵存在於languages表中,或存在於languagesmeetings表之間的連接表中。

如果希望每個Meeting以點的兩個正好兩個Language S,那麼你就可以在meetings表中使用兩個外鍵,給每一種語言的真實姓名,然後有兩個belongs_to協會在Meeting

+0

無賴。我覺得重複創建2列,但如果這是唯一的方法......謝謝! – gwalshington

+0

同樣,不,'has_many'也是一個完全有效的方法。 – meagar

+0

您可以使用驗證來強制執行最大數量的關聯。 – Eric

2

你想要的是一個N對N的關係。創建一個名爲MeetingLanguage另一種模式與兩列:

create_table :meeting_languages do |t| 
    t.references :meetings 
    t.references :languages 
end 

和協會:

class MeetingLanugage < ActiveRecord::Base 
    belongs_to :language 
    belongs_to :meeting 
end 

然後在會議模塊:

has_many :meeting_languages 
has_many :languages, through: :meeting_languages, source: :language 

現在,只要你想你可以有儘可能多的語言一次會議。