2

製品モデルのコスト属性があり、そのタイプはfloatで、すべてうまく機能しています。新しい製品を作成するとき、ユーザーは0を入力するか、無料の製品の場合は空白のままにするか、有料の製品の場合はコストを入力できますが、これもうまく機能しています

現在、無料のアイテムをスコープしようとしていますが、float がNIL空のフィールドに返され、nil フィールドを返すことができないためです。

私は試した

scope :free, where("cost IS NULL or cost < ?", 1 )

空白(NIL)のフィールドは返さず、0のみのフィールドを返しますが、空白(NIL)フィールドと0フィールドの両方を返したいです。nilRails 3のfloatフィールドが代わりに返されることを知っていますnull

4

2 に答える 2

6

これを試して:

scope :free, where(:cost => [nil,0] )
于 2012-11-19T14:16:48.933 に答える
4

代わりに、コスト フィールドが空白のままになっている場合に備えて、コスト列を 0 に設定します。これにより、nil 処理が不要になり、コードの一貫性が向上します。

これを行うには、 Product モデルに before_create コールバックを適用するだけです:

before_create :set_cost

def set_cost
  self.cost = 0 if self.cost.blank?
end

次に、移行を適用して、すべての NULL コスト製品を 0 コスト製品に変えるだけです。

于 2012-11-19T14:15:04.453 に答える