我有两个模型:Job和User。
class Job < ActiveRecord::Base
end
class User < ActiveRecord::Base
end
我希望一份工作同时拥有一个引用用户的“所有者”和一份分配给该工作的用户列表。
基本上,我希望能够做到:
job.owner # return user
job.users # returns users
使用ActiveRecord关联对此进行建模的正确方法是什么?
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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