Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails如何按计数使用链接进行排序_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails如何按计数使用链接进行排序

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

我使用的是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.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