2012-01-12 92 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