我可以使用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表中提取,然后抓取他们的订阅信息。当前代码当然是显示没有订阅的用户。
答案 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')
我希望它有所帮助。