2016-07-28 6 views
0

名前付きスコープに問題があります。複数の値を持つ名前付きスコープ

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

私はそれが必要ながら、これは、何も結果を返しません["New", "Open"]

=複数の値、ARRの結果でこのスコープを呼び出します。コンソールでこのコマンドを試してみると: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_と呼ばれます。理由を知るには、[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') 

編集(クラスメソッドの呼び出しを追加しました)これには1つの引数だけをとる柔軟性もあります。

Shipment.by_status('New') 
+0

私の入力は、 'Open、New'のようなパラメータから来ているので、それらを分割してスコープに渡す必要があります。残念ながら – stoerebink

+0

あなたの '#split'にスペースを入れる必要があるかもしれません:' split( '、') ' – user3680688

+0

スプリットは動作しますが、何らかの理由でスコープが変わっていません:( – stoerebink

関連する問題