我正在尝试将@entries集合的部分内容呈现给共享视图。
在一个控制器中,我直接在视图中渲染所有@entries。
<%= render(:partial => '/shared/entry', :collection => @entries) %>
在另一个控制器上,我通过书签进行操作。因此,该集合是@ bookmarks.entries
<%= render(:partial => '/shared/entry', :collection => @bookmarks.entries) %>
这是我的/shared/_entry.html.erb:
<div>
<%= link_to_unless_current entry.tag_list, tag_path(entry.tag_list) %>
</div>
我从书签控制器收到以下错误,但另一个控制器工作正常:
undefined method `tag_list' for #<Bookmark:0x007fad659b32b8>
看起来它发生了,因为即使认为该集合是@ bookmarks.entries,它仍然将其识别为书签而不是条目。如果我将视图更改为以下内容,则它适用于书签,但在另一个控制器上失败:
<div>
<%= link_to_unless_current entry.entry.tag_list, tag_path(entry.entry.tag_list) %>
</div>
如何才能使书签收藏只是为了有条目?
答案 0 :(得分:0)
这里发生的事情是您错误地使用了错误的语法,而且恰好有一个方法已经使用了Rails / Ruby中已有的名称。
如果你期待这个
@bookmarks.entries
返回Entry对象列表,然后就不会了。如果@bookmarks是Bookmark对象和@bookmark has_many :entries
的集合,并且您希望获得与所有书签相关联的所有条目,则可以执行类似@bookmarks.collect(&:entries).flatten.uniq
的操作。
所以,语法是错误的,并且应该中断,除了它恰好发生在包含在Rails集合类中的Enumerable模块有一个名为&#34; entries&#34;的方法,它返回一个项目数组,在本例中是所有Bookmark对象。因此,部分是期待一个条目并且它正在获取书签,而且该错误告诉您:您在书签对象上调用了tag_list
。