2014-06-27 42 views
0

如何在2個方法的查詢中重複使用?有什麼更好的做法來重用where查詢

.where(sony_alarm_tests: {ip: sony_alarm_test.ip}) 
.where(sony_alarm_tests: {round: sony_alarm_test.round}) 
.where(sony_alarm_tests: {firmware_version: sony_alarm_test.firmware_version}) 

對我來說麻煩的是查詢取決於.joins(:sony_alarm_test)

我不知道?謝謝

def previous(event_name=self.name) 
    SonyAlarmLog.joins(:sony_alarm_test) 
    .where{ utc_time.lt (my{self.utc_time} - TIME_CORRECTION) } 
    .where{ name =~ event_name } 
    .where(sony_alarm_tests: {ip: sony_alarm_test.ip}) 
    .where(sony_alarm_tests: {round: sony_alarm_test.round}) 
    .where(sony_alarm_tests: {firmware_version: sony_alarm_test.firmware_version}) 
    end 

    def following(event_name=self.name)  
    SonyAlarmLog.joins(:sony_alarm_test) 
    .where{ name =~ event_name } 
    .where{ utc_time.gt (my{utc_time} + TIME_CORRECTION) } 
    .where(sony_alarm_tests: {ip: sony_alarm_test.ip}) 
    .where(sony_alarm_tests: {round: sony_alarm_test.round}) 
    .where(sony_alarm_tests: {firmware_version: sony_alarm_test.firmware_version}) 
    end 

回答

0

您可以爲此創建一個範圍。

我已經採取了以下從http://guides.rubyonrails.org/active_record_querying.html爲您講解國

作用域內容,您可以指定哪些可以被引用作爲方法調用的關聯對象或模型常用的查詢。通過這些範圍,您可以使用之前涵蓋的每種方法,例如where,join和includes。所有的作用域方法都會返回一個ActiveRecord :: Relation對象,這個對象允許調用其他方法(比如其他作用域)。

您可以創建這樣

class Post < ActiveRecord::Base 
    scope :published, -> { where(published: true) } 
end 

一個範圍調用此公佈範圍內,我們可以通過以下方式

Post.published # => [published posts] 

你可以參考http://apidock.com/rails/ActiveRecord/NamedScope/ClassMethods/scope

+0

-1剽竊文檔叫它:http://guides.rubyonrails.org/active_record_querying.html#scopes –

+0

它可以在連接()上工作嗎? – newBike

相關問題