【问题标题】:limit Acts-as-taggable-on to max number将 Acts-as-taggable-on 限制为最大数量
【发布时间】:2013-11-23 17:17:01
【问题描述】:

我正在使用这个宝石 https://github.com/mbleigh/acts-as-taggable-on

查看:

  <% tag_cloud Cast.tag_counts, %w[s m l] do |tag, css_class| %>
  <%= link_to tag.name, tag_path(tag.name), class: css_class %>
<% end %>

控制器:

if params[:tag]
  @casts = Cast.tagged_with(params[:tag])
else
  @casts = Cast.all
end

我只想限制前 20 个标签。

谢谢

【问题讨论】:

    标签: ruby-on-rails tags


    【解决方案1】:

    您可以在控制器中执行以下操作:

    @casts = Cast.tagged_with(params[:tag]).order('DESC').limit(20)
    

    看看这里,你可以在模型中创建一些东西,如果你需要在整个应用程序中使用它,你可以在你的助手中调用它:

    http://guides.rubyonrails.org/active_record_querying.html#ordering

    所以在你的模型中:

      def self.newest
      Model.order('created_at DESC').limit(5).all
      end
    

    在您的助手调用中:

    def newest
     Model.newest
    end
    

    然后你可以在任何地方使用它:

    <% newest.each do |new| %>
    <%= new.column %>
    

    我的建议总是先在控制台中玩这个,你也会学得更快:)

    【讨论】:

    • 不行,我试过了。在视图中将 Cast.tag_counts 更改为 Cast.tag_counts.limit(5) 将限制为 5,但不会对其进行排序。
    • @tehras 做了改变帮助。看看我给你的链接,你需要在数据库级别定义模型中的顺序,然后你也可以在应用程序的任何部分从助手或模型中调用它。
    • 我不确定 tag_counts 是如何工作的,它不是数据库中的列,所以你不能查询它。
    • 这不起作用:@casts = Cast.tagged_with(params[:tag]).order('DESC').limit(20
    • 解决方法其实很简单:我把tag_counts改成tag_counts_on,加上order('count desc') Cast.tag_counts_on(:tags).order('count desc').limit(20)
    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多