2013-10-02 130 views
0

我有兩個模型:作業和用戶。從一個模型到同一模型的多個關聯

class Job < ActiveRecord::Base 
end 

class User < ActiveRecord::Base 
end 

我需要一份工作,以有指用戶既是「老闆」,並分配給任務的用戶列表。

基本上,我希望能夠做到:

job.owner # return user 
job.users # returns users 

什麼是ActiveRecord關聯模型的正確方法?

回答

1

Rails協會的大部分魔法都是爲你弄清楚類名。但是,如果需要,您可以自己指定它。

這裏的模式應該是什麼樣子:

create_table :jobs do |t| 
    t.integer :owner_id 
end 

create_table :users do |t| 
    t.references :job 
end 

而這裏的模型應該是什麼樣子

class Job < AR::Base 
    belongs_to :owner, class_name: "User" 
    has_many :users 
end 

class User < AR::Base 
    belongs_to :job 
end 
+0

爲了讓完成後,您還可以顯示如何設置用戶級的,正確定義關係,以及需要哪些列(移民)。或鏈接到材料(guides.rubyonrails.org?)以獲取更多信息 – MBO

+0

作業模式是什麼樣的?這個關聯是否期望Job會有一個user_id或類似owner_id的東西? – skalb

+1

在這裏找到答案:http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference,你可以指定它。 – skalb

0

我想你可能需要另一種模式在這裏,這樣用戶就可以在工作兩種不同的背景 - 作爲工作所有者和工作用戶。

我想嘗試這樣的事:

# Setup user model (users own jobs) 
class User < ActiveRecord::Base 
    has_many :jobs 
    has_many :user_job_subscriptions 
end 

# Setup job model 
class Job < ActiveRecord::Base 
    belongs_to :user 
    has_many :user_job_subscriptions 
end 

# Setup job subscription model (users can also have/subscribe to jobs) 
class UserJobSubscriptions < ActiveRecord::Base 
    attr_accessible :user, :job 
    belongs_to :user 
    belongs_to :job 
end 

而且,這裏是一個真棒視頻(這是一個有點過時,不過沒關係),這將有助於你瞭解不同類型提供給您協會 - 和爲什麼/何時使用它們:http://railscasts.com/episodes/47-two-many-to-many

+0

有沒有UserJobPublications與僅在工作中擁有user_id引用有什麼優勢? – skalb

+0

好吧,如果您打算在招聘出版物中存儲更多數據 - 當然,但是,如果您只是使用它將用戶加入到工作中,則沒有必要。我簡化了上面的方法。也許試試這個吧? – cmw

1
class Job < ActiveRecord::Base 
    belongs_to :owner, class_name: User 
    has_many :users 
end 

class User < ActiveRecord::Base 
    has_many :owned_jobs, class_name: Job 
    belongs_to :job 
end 

這種方式你:

@user.job 
@user.owned_job 

@job.owner 
@job.users 

分還創建列如下:

class SomeMigration 
    def change 
    add_column :jobs, :owner_id, :integer 
    add_column :users, :job_id, :integer 
    end 
end 

你可以在這裏閱讀更多:http://guides.rubyonrails.org/association_basics.html

相關問題