代码之家  ›  专栏  ›  技术社区  ›  Satchel

是否有方法创建一个分组的命名作用域?

  •  1
  • Satchel  · 技术社区  · 15 年前

    我使用searchlogic有以下功能:

    @todos = Todo.contact_user_id_is(current_user).
                  contact_campaign_id_is(@campaign).
                  current_date_lte(Date.today).
                  done_date_null.
                  ascend_by_current_date
    

    问:如何分组,以便@todos数组中每个联系人的id只有一条记录?

    1 回复  |  直到 8 年前
        1
  •  1
  •   aNoble    15 年前

    named_scope 支持分组。这样的做法应该管用:

    class Todo < ActiveRecord::Base
    
      belongs_to :contact
    
      named_scope :one_per_contact, lambda{ |user, campaign|
        {
          :joins => :contact,
          :conditions => ['contacts.user_id = ? AND contacts.campaign_id = ? AND todos.current_date <= ? AND todos.done_date IS NULL', user.id, campaign.id, Date.today],
          :group => 'todos.contact_id'
          :order => :current_date
        }
      }
    
    end
    

    然后把这个放在你的控制器里:

    @todos = Todo.one_per_contact(current_user, @campaign)