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 を使用すると、1 つのオプションしか表示されず、1 つのことを繰り返すことはできません。

于 2013-03-27T03:17:44.620 に答える
0

1 つのエンティティに対して繰り返し処理を適用する場合、最も簡単な方法は、1 つの要素を持つ配列を作成することです。

この場合、ブロックで@subcomment.each使用する代わりに。[@subcomment].each

そうは言っても、このアプローチを見直すことをお勧めします。あなたのルックアップは を実行しています.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 に答える