2016-04-17 87 views
0

我正在構建一個允許用戶發佈事件的事件應用程序,其他用戶可以「註冊」自己作爲參與該事件。我目前有兩個模型,'用戶'和'文章',其中文章是用戶可以發佈的事件。文章belongs_to :user和用戶has_many :articles, dependent: :destroy兩個模型之間有不同的關聯Rails

我試圖建立一個新的數據庫來存儲哪些用戶計劃參加一個事件,以「註冊」的形式存儲用戶和他計劃參加的活動。這意味着我需要用戶和文章之間的多對多關聯(因爲用戶可以參加多個活動,並且活動可以有多個參與者)。但是,這不會與原來的說明文章屬於單個用戶?

我該如何設置,以便我的關聯不會干擾?

+0

不知道我理解你的需求。你爲什麼需要註冊表?爲什麼不只有一個連接表'users_articles'? –

+0

(我認爲)這就是我正在做的,但我稱之爲'註冊'? – rohaldb

回答

3

您可以嘗試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 
相關問題