除了用一个例子之外,我不知道如何解释这一点。我有一个Words模型,它与自己相关。一个单词可以有一个变体(即该单词的不同版本,例如Mouse
和Mice
)。
class Word < ActiveRecord::Base
has_many :variations, class_name: "Word", foreign_key: "variant_id"
belongs_to :variant, class_name: "Word"
end
调用@word.variations
列出了基词的所有变体。例如,在Mouse上调用它会给我们一个包含Mouse的数组。@word.variant
,当老鼠被召唤时会给予老鼠。然而,这工作良好,在我看来,我不仅得到了预期的变化,而且得到了一个额外的元素/words
我使用以下代码打印:
<% @word.variations.each do |v| %>
<%= link_to v.name, v %>,
<% end %>
打印Mouse
的变体将产生Mice, /word
,其中Mice
正确地链接到该单词的显示页面,而/word
链接到localhost:3000/word
知道是什么原因造成的吗?
我想通了!在我看来,我没有给@word.variations.each
打电话,而是给@word.variations.all.each
打电话。我在控制器中创建了一个新变量:@variations = @word.variations.all
那么在我看来,我对那个变量调用CCD_ 14。
<% @variations.each do |v| %>
<%= link_to v.name, v %>,
<% end %>
这样比较好。出于某种原因,@word.variations
包含了那个有趣的额外元素。
如果有人知道为什么会这样,请告诉我。除此之外,问题得到了回答。