0

创建新的子评论时,我正在尝试获取视图中的最后一条记录...我的代码如下...

<% @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,因为我通常使用此视图来显示所有子评论。为什么 .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 则为最后一项工作

4

3 回答 3

1

使用 last 只会给你带来一个选项,你不能迭代单一的东西。

于 2013-03-27T03:17:44.620 回答
0

好的,所以如果您想对单个实体强制执行迭代,最简单的方法是创建一个包含一个元素的数组。

在这种情况下,不要@subcomment.each尝试[@subcomment].each在你的块中使用。

话虽如此,我建议您重新考虑这种方法。您的查找正在执行 a .last,这可确保返回单个实体。因此,您可以只使用它而不是迭代。

于 2013-03-27T03:31:45.417 回答
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>
于 2013-03-27T03:59:20.330 回答