2016-08-30 187 views
0

我学习Ruby on Rails,我想加入两个模型(表)。 User.rb(用户表)ActiveRecord :: StatementInvalid在Hr#internal_employee_page

class User < ActiveRecord::Base has_many :offer_letters end 

OfferLetter.rb(offer_letter表)

class OfferLetter < ActiveRecord::Base belongs_to :user end 

HrController(hr_controller.rb)

class HrController < ApplicationController 
    def internal_employee_page 
     @employees = OfferLetter.joins(:user).where(:id => :candidate_id)  
end 

运行时,我的代码我得到错误“Mysql2 ::错误:'on子句'中的未知列'offer_letters.user_id':SELECT offer_letters。* FROM offer_letters INNER JOIN users ON usersid = offer_lettersuser_id其中offer_lettersid = NULL”

<div id="job_details"> 
    <% @employees.each do |emp| %> 
     <%= render partial: "hr/employee_details", locals: {emp: emp} %> 
    <% end %>    
</div> 

错误在这行:<%@ employees.each做| EMP |%> 那么告诉我,我错了

+0

当我们使用连接时,我们必须用它的属性指定表名(应该是复数形式)。所以在你的where子句中,请指定id与其各自的表,如前所示:OfferLetter.joins(:user).where(users.id =>:candidate_id) – Navin

回答

0

当我们使用加入,我们必须指定表。名称(应为复数)及其属性,所以在您的where子句,请与各自的表指定ID像前:

@employees = OfferLetter.joins(:user).where('users.id = ?', candidate_id) 

OR

@employees = OfferLetter.joins(:user).where('offer_letters.id = ?', candidate_id) 
+0

您好纳文,我试过这个@employees = OfferLetter.joins(:user ).where('users.id =?',candidate_id)。但是我得到了错误“OfferLetter上找不到名为'user'的错误是*****关联;也许你拼错了它?*****在同一个地方 –

+0

此错误发生后,我也尝试将关联规则放入OfferLetter模型belongs_to:用户和用户模型has_one:offer_letter然后我得到了以下错误:'on子句'中的Mysql2 ::错误:未知列'offer_letters.user_id':SELECT'offer_letters'。* FROM'offer_letters' INNER JOIN'users 'ON' users'.'''''offer_letters'.'user_id' WHERE(users.id = 14)“ –

+0

这里我是”users.id = offer_letters.user_id“而不是”users.id = offer_letthers.candidate_id“因为users.id等于offer_letters.candidate_id –

相关问题