使用 STI 时是否可以从包含关联中提取?
Is it possible to pluck from an includes association when using STI?
我在 Rails 4 中有以下使用单一 Table 继承 (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
此returns以下错误:
ERROR: missing FROM-clause entry for table "folders"
由于笔记和文件夹都继承自 Item,因此只有一项 table,我无法将其从 includes 文件夹中提取出来。
如果我这样做:
user = User.first
user.notes.includes(:folder).pluck(:id, :'items.name').first
它 returns 笔记的名称而不是所属的文件夹(因为笔记和文件夹都继承自 Item 并且在项目 table 中)。有什么方法可以从包含的文件夹中提取而不是注释?
在幕后,SQL 必须引用相同的 table 两次。因此它在查询中有两个不同的名称。您需要弄清楚 Rails 用于第二个引用的名称。
使用 user.notes.joins(:folder).to_sql
找出要使用的 table 名称。
可能类似于 folders_items
,所以也许试试这个:
user.notes.joins(:folder).pluck(:id, 'folders_items.name').first
我在 Rails 4 中有以下使用单一 Table 继承 (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
此returns以下错误:
ERROR: missing FROM-clause entry for table "folders"
由于笔记和文件夹都继承自 Item,因此只有一项 table,我无法将其从 includes 文件夹中提取出来。
如果我这样做:
user = User.first
user.notes.includes(:folder).pluck(:id, :'items.name').first
它 returns 笔记的名称而不是所属的文件夹(因为笔记和文件夹都继承自 Item 并且在项目 table 中)。有什么方法可以从包含的文件夹中提取而不是注释?
在幕后,SQL 必须引用相同的 table 两次。因此它在查询中有两个不同的名称。您需要弄清楚 Rails 用于第二个引用的名称。
使用 user.notes.joins(:folder).to_sql
找出要使用的 table 名称。
可能类似于 folders_items
,所以也许试试这个:
user.notes.joins(:folder).pluck(:id, 'folders_items.name').first