我在Rails 4中使用单表继承(STI)具有以下模型:
class User < ActiveRecord::Base
has_many :notes
end
class Item < ActiveRecord::Base
end
#inherits from Item
class Folder < Item
belongs_to :folder
end
#inherits from Item
class Note < Item
belongs_to :folder
end
我想执行以下查询,该查询应该提取注释的ID及其所属文件夹的名称。
user = User.first
user.notes.includes(:folder).pluck(:id, :'folders.name').first
这会返回以下错误:
ERROR: missing FROM-clause entry for table "folders"
由于注释和文件夹都从Item继承,因此只有一个items表,我无法从includes文件夹中删除它。
如果我这样做:
user = User.first
user.notes.includes(:folder).pluck(:id, :'items.name').first
它返回音符的名称而不是属于的文件夹(因为Note和Folder都从Item继承并位于items表中)。是否有某种方法可以从已包含的文件夹中获取而不是注释?
答案 0 :(得分:1)
在幕后,SQL必须两次引用同一个表。因此,它在查询中有两个不同的名称。您需要确定Rails用于第二个参考的名称。
使用user.notes.joins(:folder).to_sql
确定要使用的表名称。
它可能类似folders_items
,所以也许试试这个:
user.notes.joins(:folder).pluck(:id, 'folders_items.name').first