【问题标题】:No such column in active record where clause活动记录 where 子句中没有这样的列
【发布时间】:2015-12-27 02:31:18
【问题描述】:
Match.where(approval: {summoner_id: 18})
Match Load (0.6ms)  SELECT "matches".* FROM "matches" WHERE "approval"."summoner_id" = ?  [["summoner_id", 18]]
SQLite3::SQLException: no such column: approval.summoner_id: SELECT "matches".* FROM "matches" WHERE "approval"."summoner_id" = ?
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: approval.summoner_id: SELECT "matches".* FROM "matches" WHERE "approval"."summoner_id" = ?

如果我这样做了

Approval.first.summoner_id
Approval Load (0.2ms)  SELECT  "approvals".* FROM "approvals"  ORDER BY "approvals"."id" ASC LIMIT 1
#=> 18

它出现了。

我正在尝试查找所有 Match 的 Approval 具有特定 Summoner id 的 Match。

如何搜索?

class Match < ActiveRecord::Base
  belongs_to :approval
end

【问题讨论】:

  • 从现在开始,请标记您对 rails 的问题rubyonrails 而不是ruby。有很多 Ruby 人不希望在他们的提要中出现 Rails 问题。
  • 好的,谢谢你的提示。

标签: ruby-on-rails sqlite activerecord rails-activerecord


【解决方案1】:

您正在尝试引用 approval 表中的列:

:approval => { summoner_id: 18 }

但你犯了两个错误:

  1. 该表名为approvals,而不是approval
  2. 您没有加入它,因此没有可用于查询的 approvalapprovals 表。

我想你的意思是:

Match.joins(:approvals).where(:approvals => {summoner_id: 18})

【讨论】:

  • 啊,“2.2.0 :010 > Match.joins(:approvals).where(:approvals => {summoner_id: 18}) ActiveRecord::ConfigurationError: 未找到名为“approvals”的关联在 Match 上;也许你拼错了?” -- Match 只有一个 Approval
  • 那么也许你想joins(:approval)而不是:approvals
猜你喜欢
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多