在日期创建的视图中显示最新内容

时间:2014-10-22 22:18:55

标签: ruby-on-rails

我可以使用created_at

按照@users.sort_by(&:created_at).reverse.each do |user|日期对用户进行排序

我需要帮助按订阅created_at日期对订阅用户进行排序。

<% @users.each do |user| %>
  <li>
    <%= link_to user.username, user %>
    <% if user.subscription %>
      |<%= user.subscription.id %> | <%= user.subscription.plan.name %> |  <%= user.subscription.created_at.strftime("%B %e, %Y") %> | <% if user.subscription.stripe_customer_token.nil? %> PAYPAL <% end %>
<% if user.subscription.paypal_recurring_profile_token.nil? %> STRIPE  <% end %>

我认为我需要在视图中更改所有代码,因为我应该只显示Subscription表中的用户。相反,我从Users表中提取,然后抓取他们的订阅信息。当前代码当然是显示没有订阅的用户。

3 个答案:

答案 0 :(得分:1)

sort_by可以占用一块。

@users.sort_by {|user| user.subscription.created_at}

http://ruby-doc.org/core-2.1.3/Enumerable.html#method-i-sort_by

把它放在链中

@users.sort_by {|user| user.subscription.created_at}.reverse.each do |user|

这是假设订阅belongs_to用户和用户has_one或has_many订阅。我可以根据你的观点来判断它。

答案 1 :(得分:1)

在查询数据库时,您可以获得所需的结果:

User.includes(:subscription).order("subscriptions.created_at DESC")

此查询将急切地为用户加载订阅记录,并将按订阅的created_at字段对记录进行排序。如果您还没有急切地使用includes(:subscription)加载订阅记录,这种方法将消除大量查询,因为每次您在代码中调用user.subscription时都会阻止您的数据库被点击。

答案 2 :(得分:1)

您可以使用以下内容在控制器操作上执行此操作:

@users = User.includes(:suscription).order('subscriptions.created_at desc')

我希望它有所帮助。