我有一个使用ancestry
gem的Lines
模型。
A line can have children and parent lines.
我有一个Miniatures
型号。
Lines has_many Miniatures through the Minilines table.
在我的线条视图中,我可以显示该线条的所有相关微缩模型。这很管用。
我想做的是展示这条线的所有相关微缩模型,以及它的孩子们。
它需要使用不同的true或uniq,以防微型与Line及其子树Lines之一相关联。
通过与从事祖先宝石工作的人交谈,我提出了以下观点:
<% Miniature.select('distinct *').joins(:lines).where(@line.subtree_conditions).each do |miniature| %>
<%= link_to miniature.name, miniature %><br />
<% end %>
他认为我的问题不是宝石的问题,而是铁轨的问题。
该代码所做的是链接到一个微型(正确),但使用该微型所属行的name
和id
,而不是该微型的name
和id
。经过一番周旋之后,我几乎要把它发挥作用了。
我把代码改成了这个
<% Line.select('distinct *').joins(:miniatures).where(@line.subtree_conditions).each do |miniature| %>
<%= link_to miniature.name, miniature %><br />
<% end %>
它现在输出正确的东西。微型的name
。它也有正确的miniature_id
,但令人困惑的是,它链接到line
路径,而不是miniature
路径。例如,它显示了小型数字3的名称,但链接到localhost:3000/lines/3
。
我会继续摆弄它,但如果有人能看到确切的问题,我会欣喜若狂的。
干杯。
在您的第二个代码块中,返回的记录不是Miniature
对象,它们是Line
对象-这是您查询的类,这是您将得到的类。:)
在第一种情况下,我猜Line
有id
和name
列,它们遮蔽了来自Miniature
的列。请尝试以下操作:Miniature.uniq.joins(:lines).where(@line.subtree_conditions)
,它将为您提供一个SELECT,它只显式地针对miniatures表中的字段。