您可以嘗試has_many through:
或has_and_belongs_to_many
關係。就我個人而言,我認爲我會爲此使用HABTM,但HM Through的優點是有一箇中間模型,可用於獲取更多信息(例如「參加者」是正在進行還是僅僅感興趣等) :http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association
至於有多個相同的兩個模型之間不同協會,你能說出的關聯任何你喜歡的,但指定要指着模型的CLASS_NAME:http://guides.rubyonrails.org/association_basics.html#has-and-belongs-to-many-association-reference
例如:
class Article < ActiveRecord::Base
belongs_to :user
has_and_belongs_to_many :attendees, class_name: "User", join_table: "articles_attendees", foreign_key: "attended_event_id", association_foreign_key: "attendee_id"
...
end
和您的用戶模式:
class User < ActiveRecord::Base
has_many :articles
has_and_belongs_to_many :attended_events, class_name: "Article", join_table: "articles_attendees", foreign_key: "attendee_id", association_foreign_key: "attended_event_id"
...
end
這樣,你能說出你的公會任何你喜歡的,只是一定要保持你的英文單單數和複數的多,一般都具有可讀性。 class_name
應該是的型號名稱,其中是您定義的關係。 foreign_key
是包含定義關係的模型的ID的數據庫列名稱。例如,在您的用戶模型中,foreign_key
應該是用戶標識。 association_foreign_key
是包含要鏈接到的模型的ID的列。
另外不要忘記創建你的遷移。像這樣的例子:
class CreateArticlesAttendees < ActiveRecord::Migration
def self.up
create_table :articles_attendees, :id => false do |t|
t.references :attended_event
t.references :attendee
end
add_index :articles_attendees, [:attended_event_id, :attendee_id]
add_index :articles_attendees, :attendee_id
end
def self.down
drop_table :articles_attendees
end
end
不知道我理解你的需求。你爲什麼需要註冊表?爲什麼不只有一個連接表'users_articles'? –
(我認爲)這就是我正在做的,但我稱之爲'註冊'? – rohaldb