0

コントローラーから返されるレコードの順序を価格で設定しようとしています。問題は、3 つの異なる価格オプションがあり、各レコードで 1 つの価格、2 つの価格、またはすべての価格を使用できることです。そこで、平均価格でポジションを設定することにしました。平均価格を取得するには、利用可能な価格の合計を利用可能な価格数で割ると予想されます。

現在、私はIDで注文を設定しています:

def category
    @manufacturers = Manufacturer.order("manufacturers.id ASC").where(:visible => true)
end

各レコードには :hp_price、:ch_price、:mp_price (すべての毎月の支払い価格) があるので、各オプションが設定されているかどうかを確認し、設定されている場合は、後で計算を実行できる配列に追加します (おそらくこれ最善の方法ではありませんか?)。

これを行う方法について少し困惑しています(私はレールが初めてです)。コントローラーでこれをインラインで実行できますか? (もしそうなら、私はこれをするべきですか?)

効果のあるもの:

def category
    @manufacturers = Manufacturer.order((manufacturers.hp_price+manufacturers.ch_price+manufacturers.mp_price)/3 ASC).where(:visible => true)
end

または、各レコードに平均価格列を追加し、レコードが作成されたときにそれを計算するという別の可能性もあります (ただし、それは私にとっては少しやり過ぎの解決策のように感じます)。

私が言ったように、私はこれに慣れていないので、あなたがベストプラクティスと考えるものを知りたいと思います.少しハックしてください!

4

1 に答える 1

0

このように列を参照すると、うまくいくはずです

def category
  @manufacturers = Manufacturer.order("(hp_price+ch_price+mp_price)/3 asc").where(:visible => true)
end
于 2013-09-07T12:09:36.943 に答える