Dav*_*dP6 5 ruby-on-rails single-table-inheritance ruby-on-rails-4
我在 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
Run Code Online (Sandbox Code Playgroud)
我想执行以下查询,该查询应该提取笔记的 id 及其所属文件夹的名称。
user = User.first
user.notes.includes(:folder).pluck(:id, :'folders.name').first
Run Code Online (Sandbox Code Playgroud)
这将返回以下错误:
ERROR: missing FROM-clause entry for table "folders"
Run Code Online (Sandbox Code Playgroud)
由于笔记和文件夹都继承自 Item,因此只有一个项目表,我无法从包含文件夹中提取它。
如果我做:
user = User.first
user.notes.includes(:folder).pluck(:id, :'items.name').first
Run Code Online (Sandbox Code Playgroud)
它返回笔记的名称,而不是所属的文件夹(因为笔记和文件夹都继承自 Item 并且都在项目表中)。有没有办法从包含的文件夹而不是笔记中提取?
在幕后,SQL 必须两次引用同一个表。因此它在查询中有两个不同的名称。您需要弄清楚 Rails 为第二个引用使用的名称。
使用user.notes.joins(:folder).to_sql什么表名,找出使用。
它可能是这样的folders_items,所以也许试试这个:
user.notes.joins(:folder).pluck(:id, 'folders_items.name').first
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2195 次 |
| 最近记录: |