我正在为求职板写一份申请表。有一个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
答案 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
:
唯一的区别是你所处的关系的哪一方面。如果User
有Profile
,那么在User
模型中您需要has_one :profile
,并且在Profile
模型中您需要belongs_to :user
}。
您可以通过查看外键的位置来确定谁拥有其他对象。您可以说User
有Profile
因为profiles
表格有user_id
列。如果profile_id
表格中有一个名为users
的列,我们会说Profile
有一个User
。
有待进一步研究,请阅读article。