Rails嵌套包含和belongs_to与has_one

时间:2015-05-28 16:49:24

标签: ruby-on-rails activerecord

我正在为求职板写一份申请表。有一个Users表,用户可以在其中发布工作或请求获得工作。因此,我的Jobs表具有发布用户的user_id字段以及与具有job_id和user_id的Job_requests表的关系,但这里user_id是请求用户的id。

我正在尝试展示用户发布的工作:

current_user.jobs.find(params[:id])

包括该工作的请求:

current_user.jobs.includes(:job_requests).find(params[:id])

但也包括请求用户的详细信息:

current_user.jobs.includes(job_requests: :user).find(params[:id])

前两个工作但第三个工作崩溃并出现以下错误:

SQLException (no such column: users.job_request_id)

我知道没有这样的专栏我正在寻找发布请求的用户的详细信息。

模特协会

User
has_many :jobs, dependent: :destroy
has_many :job_requests

Job
belongs_to :user
has_many :job_requests

JobRequest
has_one :user
has_one :job

2 个答案:

答案 0 :(得分:2)

job_request.rb 中添加以下关联

belongs_to :user
belongs_to :job_request
存储特定模型的外键时使用

belongs_to。 当你使用has_one时,你不存储另一个表的外键。

查询应该是

JobRequest.includes (:user, :job).where ('job_requests.job_id = ? and job_requests.user_id = ? ', params [:id], current_user.id)

答案 1 :(得分:1)

对于以下关联:

# User

has_many :jobs, dependent: :destroy
has_many :job_requests

# Job

belongs_to :user
has_many :job_requests

# JobRequest

belongs_to :user
belongs_to :job

您的查询将是:

current_user.jobs.includes(job_requests: :user).find(params[:id])

belongs_to& has_one

唯一的区别是你所处的关系的哪一方面。如果UserProfile,那么在User模型中您需要has_one :profile,并且在Profile模型中您需要belongs_to :user }。

您可以通过查看外键的位置来确定谁拥有其他对象。您可以说UserProfile因为profiles表格有user_id列。如果profile_id表格中有一个名为users的列,我们会说Profile有一个User

有待进一步研究,请阅读article