【问题标题】:ActiveRecord::StatementInvalid in Hr#internal_employee_pageHr#internal_employee_page 中的 ActiveRecord::StatementInvalid
【发布时间】:2016-08-30 14:04:03
【问题描述】:

我是 ruby​​ on rails 的学习者,我想加入两个模型(表)。 User.rb(用户表)

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::Error: Unknown column 'offer_letters.user_id' in 'on clause': SELECT offer_letters.* FROM offer_letters INNER JOIN users ON users.@ 987654328@ = offer_letters.user_id 其中offer_letters.id = NULL"

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

这行错误: 所以告诉我我哪里错了

【问题讨论】:

  • 当我们使用连接时,我们必须指定表名(应该是复数)及其属性。因此,在您的 where 子句中,请使用其各自的表指定 id,例如:OfferLetter.joins(:user).where(users.id => :candidate_id)

标签: mysql ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:

当我们使用连接时,我们必须指定表名(应该是复数)及其属性。因此,请在您的 where 子句中指定 id 及其各自的表,例如 for ex:

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

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

【讨论】:

  • 嗨 Navin,我试过这个 @employees = OfferLetter.joins(:user).where('users.id = ?', Candidate_id)。但我收到错误“错误是 *****Association 名称为 'user' 在 OfferLetter 上找不到;也许你拼错了?***** 在同一个地方
  • 出现此错误后,我还尝试将关联规则放入 OfferLetter 模型 belongs_to :user 和 User 模型 has_one :offer_letter 然后我收到以下错误“Mysql2::Error: Unknown column 'offer_letters.user_id'在'on 子句'中:SELECT offer_letters.* FROM offer_letters INNER JOIN users ON users.id = offer_letters.user_id WHERE (users.id = 14)"
  • 这里是“users.id = offer_letters.user_id”而不是“users.id = offer_letthers.candidate_id”,因为 users.id 等于 offer_letters.candidate_id
  • 否,错误是“Mysql2::Error: Unknown column 'offer_letters.user_id' in 'on clause': SELECT offer_letters.* FROM offer_letters INNER JOIN users ON users.id = offer_letters.user_id WHERE (users.id = 14)"
  • 尝试使用单数版本的用户而不是用户。用 user.id 替换 users.id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 2014-02-03
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多