2017-05-03 10 views
-1

ARオブジェクトの配列を含むドロップダウンメニューがあります。カートを超える3000ARオブジェクトの配列から要素を削除します

の金額は、私はカート内の金額は、DeliveryTypeには当てはまりませんので

element_of_dropmenu.delete_if {|x| x.name == "free delivery" && basket_sum < 3000} # remove one element 

をすれば
は、要素を表示する必要があります。これは私がするときsum>30すべての要素を表示し、sum<30

iはレール3.2.6を使用するときに一つの要素を削除する必要が

if sum > 3000 
    element_of_dropmenu 
else 
element_of_dropmenu.drop(1) 
end 

を行うことができます別のモデル

ですルビー2.0.0 :)

私は間違って醜い方法を考える。
より良い方法でコードを修正する方法を教えてください。
ありがとうございます。

+0

あなたは 'どこで'私を使用することができますあなたの 'element_of_dropmenu'や新しい変数を作成してください。あなたがどのようにあなたの 'element_of_dropmenu'を設定するのが役に立つのでしょうか投稿すると。 –

答えて

0

私は単純なSQLまたはActiveRecordメソッドで結果を達成できると信じています。下のスニペットのようなSthはあなたの問題を解決します。

YourModel.where(["name = ? AND basket_sum < ? ", "freedelivery", 3000]) 

または、

YourModel.where("name = ?", "freedelivery").where("basket_sum < ?", 3000) 
+0

カート内の金額がDeliveryTypeに該当しません。これは別のモデルです。私は質問を更新する。 – dmitriy

0

あなたは、以降4.1からのActiveRecordのミューテータメソッドを呼び出すことはできませんrelease notes

をご確認の関係は、もはや#mapなどのミューテータメソッドを持っていません! #delete_if。これらのメソッドを使用する前に#to_aを呼び出して配列に変換してください。

あなたはselect

element_of_dropmenu.select {|x| x.name != "free delivery" && basket_sum > 3000} 

を利用することができますかmarmeladzeが示唆したように、あなたがwhere句を使用またはより良い範囲

scope :premium, -> { where("name = ? AND basket_sum > ?", "free delivery", 3000) } 

を作成し、関連して、それをチェーンでき

element_of_dropmenu.premium 
+0

私はレール3.2.6とルビー2.0.0を使用しています:) – dmitriy

+0

それでもうまくいくはずですが、これであなたはあなたに幸運を試すことができます –

+0

私はスコープが良いアイデアと言います –

関連する問題