有没有办法创建一个分组的命名范围?

发布于 2024-09-30 09:52:03 字数 387 浏览 4 评论 0原文

我使用 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 包含单个 contact_id 的 Todo 记录(contact_id 是 Todo 上的一个属性)。

问题:如何分组,以便 @todos 数组中每个 contact_id 只有一条记录?

I have the following using 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

I only want @todos to contain a Todo record for a single contact_id (contact_id is an attribute on Todo).

Question: how can I group so that I there is only one record per contact_id in the @todos array?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哑剧 2024-10-07 09:52:03

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)

该代码可能并不完全适合您的应用程序,但您明白了。

named_scope supports grouping. Something like this should work:

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

Then just put this in your controller:

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

The code may not be exactly right for your app, but you get the idea.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文