Rails 3 sort_by并发症

时间:2011-03-06 00:32:13

标签: ruby-on-rails ruby-on-rails-3 sorting

所以我有一个论坛应用程序和双嵌套资源。部分 - >主题 - >回复并在应用程序控制器(Rails 3样式)中进行设置。我正在查看剖面视图,并尝试对主题进行排序。在大多数论坛中,最合乎逻辑的排序方法是在最后更新时。如果仅仅通过回复,这将是简单的。显而易见的问题是,有些主题没有回复,因此仅通过回复进行排序将无效。

            <% @section.topics.sort_by{ ?? }.each do |topic| %>
              <tr>
                <td class="topic"><%= link_to topic.subject, [@section, topic] %></td>
                <td class="postCount"><%= topic.replies.count %></td>
                <td class="date">
                <% if topic.replies.empty? %>
                  <%= topic.created_at.strftime("%I:%M%p %m/%d/%y") %>
                <% else %>
                  <%= topic.replies.last.created_at.strftime("%I:%M%p %m/%d/%y") %>
                <% end %>
                </td>
              </tr>  
            <% end %>

所以基本上如果回复是空的,你在创建主题时拉。如果有回复,请在创建最后一个回复时拉出。这在show sections视图中显示得非常好,但我不知道如何使用它进行排序。

我尝试在名为“last_updated”的主题模型中创建一个方法。我写得像:

  def last_update(sectionTopic)
if sectionTopic.replies.empty?
  return sectionTopic.created_at
else
  return sectionTopic.replies.last.created_at
end

通过视图传递:

<% @section.topics.sort_by{ |topic| topic.last_update(@section.topics)}.each do |topic| %>

但是当我这样做时,我得到一个未定义的方法`回复'。有任何想法吗?谢谢。

1 个答案:

答案 0 :(得分:0)

据我所知,

topic.last_update(@section.topics)

应该是:

topic.last_update(topic)