2013-10-04 172 views
0

我試圖讓使用Rails 3.2.14應用程序,但我不能換我的頭周圍,我迄今建立的模型關聯。我有一個相互連接,以得到所需的結果,但到目前爲止,它一直沒有工作四款車型。Ruby on Rails的模型關聯

  • 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

的訪問器,如果你寫你這樣的模型關聯可以大大簡化:

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 
+0

完美。我會進一步討論這個問題。如何將簡歷表整合到該表中。我有一個單獨的簡歷表,提供用戶的個人資料信息。恢復屬於用戶和用戶已經恢復。從僱主(用戶與工作)角度來看,我們如何才能在給定的工作應用程序上搜索簡歷。 – user2716736

+0

如果我的理解正確,job_application.user是申請該工作的用戶。如果是這樣,則只能將一個簡歷附加到JobApplication。那是對的嗎? – PinnyM

+0

@ user2716736 - 基於此理解進行更新。 – PinnyM

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 %> 
+1

這將工作,雖然受到N + 1個查詢。你可以添加'includes'來解決這個問題,但是當你只需編寫必要的ActiveRecord關聯時就不必要地混亂了。 – PinnyM

+1

你的方式更好:) +1 – dax

+0

達克斯我喜歡這種方式,即使它不是最乾淨的答案。我給你兩個+1,因爲我喜歡你的兩個答案。 – Nikola