我有兩個模型:作業和用戶。從一個模型到同一模型的多個關聯
class Job < ActiveRecord::Base
end
class User < ActiveRecord::Base
end
我需要一份工作,以有指用戶既是「老闆」,並分配給任務的用戶列表。
基本上,我希望能夠做到:
job.owner # return user
job.users # returns users
什麼是ActiveRecord關聯模型的正確方法?
我有兩個模型:作業和用戶。從一個模型到同一模型的多個關聯
class Job < ActiveRecord::Base
end
class User < ActiveRecord::Base
end
我需要一份工作,以有指用戶既是「老闆」,並分配給任務的用戶列表。
基本上,我希望能夠做到:
job.owner # return user
job.users # returns users
什麼是ActiveRecord關聯模型的正確方法?
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
我想你可能需要另一種模式在這裏,這樣用戶就可以在工作兩種不同的背景 - 作爲工作所有者和工作用戶。
我想嘗試這樣的事:
# 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
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
爲了讓完成後,您還可以顯示如何設置用戶級的,正確定義關係,以及需要哪些列(移民)。或鏈接到材料(guides.rubyonrails.org?)以獲取更多信息 – MBO
作業模式是什麼樣的?這個關聯是否期望Job會有一個user_id或類似owner_id的東西? – skalb
在這裏找到答案:http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference,你可以指定它。 – skalb