2016-07-28 108 views
0

我在命名範圍上遇到了一些麻煩。具有多個值的命名範圍

def self.by_status(status) 
    arr = status.split(',').map{ |s| s }   
    logger.debug "RESULT: #{arr.inspect}" 
    where(status: arr) 
end 

當我把這個範圍有不止一個值,編曲的結果= ["New", "Open"]

這不返回任何結果,而它應該。如果我在控制檯中試用這個命令:Shipment.where(status: ['New', 'Open'])我得到了我期待的結果。

我在這裏錯過了什麼嗎?

編輯(添加類方法的調用):

def self.to_csv(options = {}, vendor_id, status) 
    CSV.generate(options) do |csv| 
    csv << column_names 

    if !vendor_id.blank? && status.blank? 
      by_vendor_id(vendor_id).each do |product| 
      csv << product.attributes.values_at(*column_names) 
     end 
     elsif !vendor_id.blank? && !status.blank? 
      by_vendor_id(vendor_id).by_status(status).each do |product| 
      csv << product.attributes.values_at(*column_names) 
     end 
     elsif vendor_id.blank? && !status.blank? 
     logger.debug "by_status result: #{by_status(status).inspect}" 
      by_status(status).each do |product| 
      csv << product.attributes.values_at(*column_names) 
     end  
     else 
     all.each do |product| 
      csv << product.attributes.values_at(*column_names) 
     end 
    end 
    end 
end 
+0

好吧,你能告訴你如何在你的應用程序中調用類方法'by_status'。順便說一下你所稱的_class method_,而不是_named的scope_。閱讀[this](http://blog.plataformatec.com.br/2013/02/active-record-scopes-vs-class-methods/)知道爲什麼。 –

+0

我會用我的電話更新我的帖子。上下文是,我將參數從我的數據表傳遞到我的控制器,然後傳遞給我的模型。我試圖使用這些參數導出到csv。 – stoerebink

回答

0

試試這個模型中:

scope :by_status, ->(*statuses) { where(status: statuses) } 

然後在你的代碼,你可以撥打:

Shipment.by_status('New', 'Open') 

這也具有隻需要一個參數的靈活性:

Shipment.by_status('New') 
+0

我的輸入來自一個像這樣的參數:'Open,New',所以我必須將它們分開,然後將它們傳遞給範圍。這是行不通的 – stoerebink

+0

然後,也許你只需要在你的'#split'中包含一個空格:'split(',')' – user3680688

+0

分割的工作,但由於某種原因的範圍沒有:( – stoerebink