2012-01-12 91 views
1

我想执行的任务模型的高级查询(简体versio:高级搜索查询3.1

class Task 
    belongs_to :user_task 
    belongs_to :customer 
end 

class UserTask 
    has_many :tasks 
    belongs_to: :user 
    attr_accessible :date 
end 

class Customer 
    has_many :tasks 
end 

我想建立是与以下领域去工作模式搜索表单:

  • FROM_DATE(日期字段):所有任务对应UserTask是 FROM_DATE
  • TO_DATE(日期字段):所有的对应UserTas任务k是 to_date
  • 客户(作为复选框收集):相应客户包括在客户选择中的所有任务。

我创建了一个用于保存搜索的TaskSearch资源,并且可以想象一个用于查询数据库的大而难看的SQL字符串,但我不确定这是实现它的最佳方式。

哪个会是ActiveRecord方法?

谢谢先进。

回答

5
class Task 
    belongs_to :user_task 
    belongs_to :customer 

    scope :from_date, lambda { |date| joins(:user_task).where("user_tasks.date > ?", date) } 
    scope :to_date, lambda { |date| joins(:user_task).where("user_tasks.date < ?", date) } 
    scope :with_customers, lambda { |customer_ids| joins(:user_task).where("user_tasks.user_id IN (?)", customer_ids) } 
end 

希望这会起作用。事情就是,当我们连接表格时,您可能会得到多个相同任务的结果。您可能需要在select()方法中添加明显的子句,如下所示:

select("DISTINCT tasks.*") 
+0

非常感谢。你确定它会重复任务吗?我想不是。 – 2012-01-12 03:49:40