Ruby on rails 如何按描述限制订单,然后按(:id)限制订单?
这将标签限制在标签计数最高的前20位: 标记.rbRuby on rails 如何按描述限制订单,然后按(:id)限制订单?,ruby-on-rails,ruby,tags,tag-cloud,Ruby On Rails,Ruby,Tags,Tag Cloud,这将标签限制在标签计数最高的前20位: 标记.rb scope :top_20, -> { where("taggings_count != 0").order("taggings_count DESC").limit(3) } <% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %> <%= link_to tag.name, tag_path(tag), :class =>
scope :top_20, -> {
where("taggings_count != 0").order("taggings_count DESC").limit(3)
}
<% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %>
<%= link_to tag.name, tag_path(tag), :class => css_class %>
<% end %>
然后我想根据他们的:id
而不是他们的标签数量来订购这20个
应用程序\u控制器
before_action :tag_cloud
def tag_cloud
@tags = Tag.all.top_20.order(:id)
end
.order(:id)
不幸的是,它不起作用。它们仍按计数降序显示
\u tags.html.erb
scope :top_20, -> {
where("taggings_count != 0").order("taggings_count DESC").limit(3)
}
<% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %>
<%= link_to tag.name, tag_path(tag), :class => css_class %>
<% end %>
css_类%>
如果您需要进一步的代码或解释来帮助我,请告诉我:-]您的问题不太清楚,您想按desc或asc顺序订购记录吗 编写一个作用域,如下所示
scope :order_id_asc, -> { order('id ASC') }
scope :order_id_desc, -> { order('id DESC') }
并按如下方式重新编写代码,调用任意一个作用域
def tag_cloud
@tags = Tag.top_20.order_id_asc
end
您的问题不是很清楚,您是想按desc订单还是asc订单订购记录 编写一个作用域,如下所示
scope :order_id_asc, -> { order('id ASC') }
scope :order_id_desc, -> { order('id DESC') }
并按如下方式重新编写代码,调用任意一个作用域
def tag_cloud
@tags = Tag.top_20.order_id_asc
end
查询将只考虑第一个
订单
。您可以使用覆盖它,但这在您的情况下不起作用,因为它将覆盖顺序(“标记计数描述”)
适合你的是:
@tags=Tag.all.top_20.sort{x,y{x.id y.id}
查询将只考虑第一个顺序。您可以使用覆盖它,但这在您的情况下不起作用,因为它将覆盖顺序(“标记计数描述”)
适合你的是:
@tags=Tag.all.top_20.sort{x,y | x.id y.id}
如果您想使用纯SQL而不是Rubysort
进行此操作,则必须使用子查询:
Tag.from(Tag.top_20, :tags).order(:id)
如果您想使用纯SQL而不是Ruby排序,那么必须使用子查询:
Tag.from(Tag.top_20, :tags).order(:id)
我宁愿这样重写这个范围:
from(
where.not(taggings_count: 0)
.order(taggings_count: :desc)
.limit(20)
.as(table_name)
)
这样做的目的是修改FROM
-子句,使其不是从'tags'
表中获取结果,而是从一个临时结果集(在子查询中获取)获取结果,该临时结果集具有相同的别名(table\u name
仅返回该名称),从而使ActiveRecord误以为我们在查询相同的源。您可以在顶部应用任何操作,就像它是一个完整的表一样
至于As
-方法,似乎在任何地方都没有提到。。。它来自Arel,一个在引擎盖下的ActiveRecord中使用的SQL AST管理器。事实上,它被委托给查询的Arel::SelectManager
,可在任何ActiveRecord::Relation上的Arel
方法上使用
from(
where.not(taggings_count: 0)
.order(taggings_count: :desc)
.limit(20)
.as(table_name)
)
这样做的目的是修改FROM
-子句,使其不是从'tags'
表中获取结果,而是从一个临时结果集(在子查询中获取)获取结果,该临时结果集具有相同的别名(table\u name
仅返回该名称),从而使ActiveRecord误以为我们在查询相同的源。您可以在顶部应用任何操作,就像它是一个完整的表一样
至于As
-方法,似乎在任何地方都没有提到。。。它来自Arel,一个在引擎盖下的ActiveRecord中使用的SQL AST管理器。事实上,它被委托给查询的Arel::SelectManager
,可以在任何ActiveRecord::Relation上的Arel
方法上找到,非常感谢@Abm在这里呆了一段时间:)@AnthonyGalli.com您正在寻找这个。。该死非常感谢@Abm在这里呆了一段时间:)@AnthonyGalli.com你在找这个。。该死是的,这就够了+是的,这就足够了+1@ArupRakshit那可能是阿雷尔的,我刚试过,效果不错。即使如此,您也可以将别名作为第二个参数提供给from
,它的工作原理基本相同。@ArupRakshit它确实来自Arel。授权有效。一个更完整的表单是.arel.as(table_name)
@ArupRakshit一个可能来自arel的表单,我刚刚尝试了它,它成功了。即使如此,您也可以将别名作为第二个参数提供给from
,它的工作原理基本相同。@ArupRakshit它确实来自Arel。授权有效。更完整的表格是.arel.as(表名)