“缺少表的FROM子句条目”是什么意思?

时间:2018-07-16 12:42:28

标签: ruby-on-rails activerecord

如何编写SQL查询,以便Group.where("blob.item.id = ?", self.id)返回正确的关联?该行给出以下错误:ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: missing FROM-clause entry for table "item"

SQL是在Item上的一种方法中编写的,当我调用它时,它就像Item.first.groups一样:

Class Item
 has_many :wanted_trades, class_name: "Trade", foreign_key: :share_id
 has_many :shares

 def trades
  Trade.where("share.item.id = ?", self.id)
 end
end


Class Trade
 belongs_to :wanted_share, class_name: "Share"
end

Class Share
 belongs_to :item
end

如果我做Trade.joins(wanted_share: :item).where("wanted_share.item.id = ?", self.id),则得到同样的错误,只是需要更长的SQL查找。

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用joins?据我所知,ActiveRecord不允许您在where方法中使用表前缀,因此您要么必须使用joins

http://guides.rubyonrails.org/active_record_querying.html#joining-tables

或编写原始sql,这将允许您使用表前缀: sql = "SELECT * from ..." records_array = ActiveRecord::Base.connection.execute(sql)