【问题标题】:Rails 3 sort_by complicationsRails 3 sort_by 并发症
【发布时间】:2011-07-09 15:11:20
【问题描述】:

所以我有一个论坛应用程序和双重嵌套资源。 Section-->Topic-->Replies 并在应用程序控制器中设置(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 %>

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

我尝试在主题模型中创建一个名为“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| %>

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

【问题讨论】:

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


    【解决方案1】:

    据我所知,

    topic.last_update(@section.topics)
    

    应该是:

    topic.last_update(topic)
    

    【讨论】:

    • 第二双眼睛永远不会受伤。 =D