Ruby on rails Rails如何按计数使用链接进行排序
我使用的是Rails 4。我在输出中得到了一个输出:Ruby on rails Rails如何按计数使用链接进行排序,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我使用的是Rails 4。我在输出中得到了一个输出: <% @places.each do |place| %> <tr> <td> All subscriptions: <%= Subscription.where(place_id: place.id).count %> Males: <%= Subscription.where(user_gender: 'male', place_id: place.i
<% @places.each do |place| %>
<tr>
<td>
All subscriptions: <%= Subscription.where(place_id: place.id).count %>
Males: <%= Subscription.where(user_gender: 'male', place_id: place.id).count %>
Females: <%= Subscription.where(user_gender: 'female', place_id: place.id).count %>
</td>
<td><p><%= image_tag place.place_photo(:small) %></td>
<td><%= place.title %></td>
<td><%= place.place_type.title %></td>
<td><%= place.content %></td>
<td><%= place.address %></td>
</tr>
<% end %>
所有订阅:
男性:
女性:
我想按订阅进行排序。计数我该怎么做?如果要按订阅对@places进行排序,请按计数:
@places.joins(:subscriptions).group(“places.id”)。选择(“places.*,count(*)as subscriptions\u count”)。订购(“subscriptions\u count DESC”)。每个都执行
注意:您应该在控制器或模型中执行这些mysql查询,而不是在视图中
只需使用
即可将订阅计数输出到each中,因为如果要按订阅计数对@places进行排序,则可通过select()将订阅计数包括在内:
@places.joins(:subscriptions).group(“places.id”)。选择(“places.*,count(*)as subscriptions\u count”)。订购(“subscriptions\u count DESC”)。每个都执行
注意:您应该在控制器或模型中执行这些mysql查询,而不是在视图中
只需使用
即可将订阅计数输出到each中,因为如果要按订阅计数对@places进行排序,则可通过select()将订阅计数包括在内:
@places.joins(:subscriptions).group(“places.id”)。选择(“places.*,count(*)as subscriptions\u count”)。订购(“subscriptions\u count DESC”)。每个都执行
注意:您应该在控制器或模型中执行这些mysql查询,而不是在视图中
只需使用
即可将订阅计数输出到each中,因为如果要按订阅计数对@places进行排序,则可通过select()将订阅计数包括在内:
@places.joins(:subscriptions).group(“places.id”)。选择(“places.*,count(*)as subscriptions\u count”)。订购(“subscriptions\u count DESC”)。每个都执行
注意:您应该在控制器或模型中执行这些mysql查询,而不是在视图中
您只需使用
即可将订阅计数输出到您的each中,因为它是通过select()包含的。我建议您做两件事。首先在订阅模型上添加计数器缓存
使用迁移在订阅表中添加列
add_column :subscriptions, :places_count, :integer, :default => 0
add_column :subscriptions, :male_places_count, :integer, :default => 0
add_column :subscriptions, :female_places_count, :integer, :default => 0
修改您的地点和订阅模式以更新这些数量
class Place
def update_subscription_counters
subscription.update_counters
end
after_create :update_subscription_counters
after_destroy :update_subscription_counters
end
class Subscription
def update_counters
self.places_count = places.count
self.male_places_count = places.male.count
self.female_places_count = places.female.count
self.save
end
end
当您创建/销毁一个位置时,这些计数都将被更新,并且当您枚举您的位置时,不会出现任何不必要的计数查询
其次,您可以使用这些来订购您的位置
class SubscriptionsController
def show
subscription = Subscription.find(params[:id])
@places = subscription.places.includes(:subscription).order(:places_count)
end
end
我建议你做两件事。首先在订阅模型上添加计数器缓存
使用迁移在订阅表中添加列
add_column :subscriptions, :places_count, :integer, :default => 0
add_column :subscriptions, :male_places_count, :integer, :default => 0
add_column :subscriptions, :female_places_count, :integer, :default => 0
修改您的地点和订阅模式以更新这些数量
class Place
def update_subscription_counters
subscription.update_counters
end
after_create :update_subscription_counters
after_destroy :update_subscription_counters
end
class Subscription
def update_counters
self.places_count = places.count
self.male_places_count = places.male.count
self.female_places_count = places.female.count
self.save
end
end
当您创建/销毁一个位置时,这些计数都将被更新,并且当您枚举您的位置时,不会出现任何不必要的计数查询
其次,您可以使用这些来订购您的位置
class SubscriptionsController
def show
subscription = Subscription.find(params[:id])
@places = subscription.places.includes(:subscription).order(:places_count)
end
end
我建议你做两件事。首先在订阅模型上添加计数器缓存
使用迁移在订阅表中添加列
add_column :subscriptions, :places_count, :integer, :default => 0
add_column :subscriptions, :male_places_count, :integer, :default => 0
add_column :subscriptions, :female_places_count, :integer, :default => 0
修改您的地点和订阅模式以更新这些数量
class Place
def update_subscription_counters
subscription.update_counters
end
after_create :update_subscription_counters
after_destroy :update_subscription_counters
end
class Subscription
def update_counters
self.places_count = places.count
self.male_places_count = places.male.count
self.female_places_count = places.female.count
self.save
end
end
当您创建/销毁一个位置时,这些计数都将被更新,并且当您枚举您的位置时,不会出现任何不必要的计数查询
其次,您可以使用这些来订购您的位置
class SubscriptionsController
def show
subscription = Subscription.find(params[:id])
@places = subscription.places.includes(:subscription).order(:places_count)
end
end
我建议你做两件事。首先在订阅模型上添加计数器缓存
使用迁移在订阅表中添加列
add_column :subscriptions, :places_count, :integer, :default => 0
add_column :subscriptions, :male_places_count, :integer, :default => 0
add_column :subscriptions, :female_places_count, :integer, :default => 0
修改您的地点和订阅模式以更新这些数量
class Place
def update_subscription_counters
subscription.update_counters
end
after_create :update_subscription_counters
after_destroy :update_subscription_counters
end
class Subscription
def update_counters
self.places_count = places.count
self.male_places_count = places.male.count
self.female_places_count = places.female.count
self.save
end
end
当您创建/销毁一个位置时,这些计数都将被更新,并且当您枚举您的位置时,不会出现任何不必要的计数查询
其次,您可以使用这些来订购您的位置
class SubscriptionsController
def show
subscription = Subscription.find(params[:id])
@places = subscription.places.includes(:subscription).order(:places_count)
end
end