【问题标题】:Rails: scope order questionRails:范围顺序问题
【发布时间】:2011-01-22 18:53:46
【问题描述】:

我有一些属于位置和类别的帖子,有点像 craigslist 帖子。

我想按最近发布的排序,如果用户指定,还按位置和类别进行过滤。

有人可以举例说明如何做到这一点吗?

【问题讨论】:

    标签: sql ruby-on-rails database ruby-on-rails-3 sorting


    【解决方案1】:

    在 Rails 3 中,您可以一起更改订单、位置等。 ASCII 广播 activerecord queries in Rails3

    query = Post.order("published_at desc")
    query = query.where("location_id = ?", params[:location_id]) unless params[:location_id].blank?
    query = query.where("category_id = ?", params[:category_id]) unless params[:category_id].blank?
    @posts = query.all
    

    【讨论】:

    • 如何指定 location_id?
    • 一个帖子也有_many标签。例如,一篇文章可能有一个 java 标签和一个 css 标签。我可能只想用一个 java 标签过滤所有帖子。或者带有 java 和 css 标签的帖子。我该怎么做?
    • 我的代码的第 2 行指定了 location_id。您应该搜索或打开第二个问题,了解如何进行 OR 查询。
    【解决方案2】:

    您可以将用于排序的字段缓存到帖子中。

    before_save: cache_sortables
    
    def cache_sortables
      self.category_title = self.category.title if self.category?
      self.location_title = self.location.title if self.location?
    end
    
    Post.find(:all, :order => 'location_title, category_title, created_at')
    

    当父类别/位置标题更改时更新帖子作为练习留给读者。

    【讨论】:

      猜你喜欢
      • 2019-01-25
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      相关资源
      最近更新 更多