2016-07-28 17 views
0

Ich habe Probleme mit meinem benannten Bereich.Benannter Bereich mit mehreren Werten

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

Als ich nenne dies Umfang mit mehr als einem Wert, das Ergebnis arr = ["New", "Open"]

Dies keine Ergebnisse zurückgibt, während es sollte. Wenn ich diesen Befehl in der Konsole versuche: Shipment.where(status: ['New', 'Open']) bekomme ich die Ergebnisse, die ich erwarte.

Fehle ich hier etwas?

Edit (hinzugefügt, um den Aufruf der Klassenmethode):

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

Ok, kannst du zeigen, wie du die Klassenmethode 'by_status' in deiner App aufruft. Übrigens, was Sie haben, heißt _class-Methode_, nicht ein _named-Bereich_. Lesen Sie [this] (http://blog.plataformatec.com.br/2013/02/active-record-scopes-vs-class-methods/), um zu wissen, warum. –

+0

Ich werde meinen Post mit meinem Anruf aktualisieren. Der Kontext ist, ich übergebe die Parameter von meiner Datentabelle zu meinem Prüfer und dann zu meinem Modell. Ich versuche, die Parameter zu verwenden, um nach csv zu exportieren. – stoerebink

Antwort

0

Versuchen Sie dies in Ihrem Modell:

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

Dann in Ihrem Code können Sie anrufen:

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

Dies hat die Flexibilität, nur ein Argument zu nehmen:

Shipment.by_status('New') 
+0

Meine Eingabe kommt von einem Parameter wie diesem: 'Offen, Neu', also muss ich sie teilen und sie dann an das Zielfernrohr übergeben. Dies funktioniert leider nicht – stoerebink

+0

Dann müssen Sie vielleicht nur ein Leerzeichen in Ihre '# Split':' Split (',') ' – user3680688

+0

Die Aufteilung funktioniert, aber der Umfang aus irgendeinem Grund nicht :( – stoerebink

Verwandte Themen