我正在尝试在创建新的子评论时获取视图中的最后一条记录...我的代码如下......
<% @subcomment = @comment.subcomments.order("created_at").last %>
<% @subcomment.each do |comment| %>
this worked!
<% end %>
我知道@subcomment有最后一条记录......(例如,当我使用.inspect时,它会显示该对象),但出于某种原因使用.each会出现以下错误......
NoMethodError (undefined method `each' for #<Subcomment:0x007fb14c0e5510>):
我需要使用.each,因为我使用此视图来显示所有子注释。怎么会。每个不起作用,有什么替代方案?
谢谢。
最后......我想要这样的事情:
<% if defined? showlast %>
<% @subcomments = @comment.subcomments.order("created_at").last %>
<% [@subcomments].each do |subcomment| %>
<div id="subcomments">
<% else %>
<div id="subcomments">
<% @subcomments.each do |subcomment| %>
<<here is a long template of what to do with @subcomments>>
即。我希望模板迭代(如果是多个)并且如果参数:showlast被发送则用于最后一个项目
答案 0 :(得分:1)
使用last只会为你带来一个选项,你不能迭代一件事。
答案 1 :(得分:0)
好的,所以如果要对单个实体强制执行迭代,最简单的方法是创建一个包含一个元素的数组。
在这种情况下,而不是@subcomment.each
尝试在您的区块中使用[@subcomment].each
。
话虽如此,我建议您重新审视这种方法。您的查找正在执行.last
,这可确保返回单个实体。所以,你可以使用它而不是迭代。
答案 2 :(得分:0)
您应该将<<here is a long template of what to do with @subcomments>>
放入名为_subcomment.html.erb
的部分中。然后你可以这样做:
<div id="subcomments">
<% if defined? showlast %>
<%= render @comment.subcomments.order("created_at").last %>
<% else %>
<% @subcomments.each do |subcomment| %>
<%= render subcomment %>
<% end%>
<% end %>
</div>