Ruby on Rails模型关联

时间:2013-10-04 14:38:32

标签: sql ruby-on-rails activerecord associations

我正在尝试使用Rails 3.2.14创建一个应用程序,但我无法围绕我迄今为止构建的模型关联。我有四个相互关联的模型,以达到预期的效果,但到目前为止还没有起作用。

  • Job包含字段:user_idtitle
  • Jobapplication包含字段:job_iduser_idisrefused
  • Resume包含字段:user_idprofession

我正在尝试在视图的实例变量中使用jobapplication模型提取特定用户已申请的所有作业。

所有包含外键的表在另一端都有belong_to个关联以及has_many

到目前为止,我在控制器中尝试过这样的事情:

def applied job
  @jobapplications = Jobapplication.where('user_id = ?', current_user.id)
  @jobs            = @jobapplications.jobs
end

目的是找到用户已申请的职位。

我应该重新设计模型关联吗?

2 个答案:

答案 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 %>