我正在尝试使用Rails 3.2.14创建一个应用程序,但我无法围绕我迄今为止构建的模型关联。我有四个相互关联的模型,以达到预期的效果,但到目前为止还没有起作用。
Job
包含字段:user_id
,title
Jobapplication
包含字段:job_id
,user_id
,isrefused
Resume
包含字段:user_id
,profession
我正在尝试在视图的实例变量中使用jobapplication
模型提取特定用户已申请的所有作业。
所有包含外键的表在另一端都有belong_to
个关联以及has_many
。
到目前为止,我在控制器中尝试过这样的事情:
def applied job
@jobapplications = Jobapplication.where('user_id = ?', current_user.id)
@jobs = @jobapplications.jobs
end
目的是找到用户已申请的职位。
我应该重新设计模型关联吗?
答案 0 :(得分:2)
如果您编写如下的模型关联,可以大大简化访问器:
class User < ActiveRecord::Base
has_many :jobs # jobs posted
has_many :job_applications # job applications posted
has_many :applied_jobs, through => :job_applications, :source => :job # jobs applied for
has_one :resume
end
class Job < ActiveRecord::Base
belongs_to :user
has_many :job_applications
has_many :applicants, :through => :job_applications, :source => :user # applicants for this job
has_many :applicant_resumes, :through => :job_applications, :source => :resume
end
class JobApplication < ActiveRecord::Base
belongs_to :user
belongs_to :job
has_one :resume, :through => :user # the resume for the application
end
class Resume < ActiveRecord::Base
belongs_to :user
end
现在,您可以轻松找到用户申请的职位:
current_user.applied_jobs
或针对特定工作的所有申请人(申请用户):
@job.applicants
你可以看到用户的简历:
current_user.resume
或者申请表的简历:
@job_application.resume
或者申请特定工作的所有简历:
@job.applicant_resumes
答案 1 :(得分:1)
这看起来没问题:
@jobapplications = Jobapplication.where("user_id =?", current_user.id)
但不确定:
@jobs = @jobapplications.jobs
jobs
方法是什么?
试试这个:
#some_controller.rb
def applied_job #note the underscore!
@jobapplications = Jobapplication.where("user_id =?", current_user.id)
end
并在视图中
<% @jobapplications.each do |application| %>
#list applications here
<% end %>