Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 如何按描述限制订单,然后按(:id)限制订单?_Ruby On Rails_Ruby_Tags_Tag Cloud - Fatal编程技术网

Ruby on rails 如何按描述限制订单,然后按(:id)限制订单?

Ruby 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 =>

这将标签限制在标签计数最高的前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 => 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而不是Ruby
sort
进行此操作,则必须使用子查询:

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(表名)