0

我有两个模型:作业和用户。

class Job < ActiveRecord::Base
end

class User < ActiveRecord::Base
end

我希望一份工作既有一个指代用户的“所有者”,也有一个分配给该工作的用户列表。

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

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

用 ActiveRecord 关联建模的正确方法是什么?

4

3 回答 3

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
于 2013-10-02T21:33:22.983 回答
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

于 2013-10-02T21:57:01.247 回答
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-两个多对多

于 2013-10-02T21:48:38.017 回答