3

私は箱とボールを持っています。ボールは箱に入っています。ボールは赤と緑のどちらでもかまいません。

class Box < ActiveRecord::Base
  has_many :balls
end

class Ball < ActiveRecord::Base
  belongs_to :box
  scope :green, where(:color => "green")
end

has_manyを緑色のボールだけで設定したい。finder_sqlメソッドが存在することは知っていますが、スコープを介して設定する方法がわかりません。

次の例を同等にしたいと思います。

@orders = @box.balls
@orders = @box.balls.green
4

4 に答える 4

7

いつでも使用できます:

has_many :balls, :conditions => { :color => "green" }

Rails3で動作しますが、ActiveRecord :: Relationと同等のものがあるため、この構文が非推奨にならないかどうかはわかりません。Rails3に関連する公式ドキュメントでは、この構文は引き続き使用できるため、2.3.xブランチの場合と同じように使用できます。

于 2010-09-01T13:03:45.913 に答える
2

Rails 3 では、少し変更されています。

class Item
  scope :red, where(:colour => 'red')
  scope :since, lambda {|time| where("created_at > ?", time) }
end

red_items = Item.red
available_red_items = red_items.where("quantity > ?", 0)
old_red_items = Item.red.since(10.days.ago)

クレジットと詳細情報

于 2010-07-12T13:06:37.350 に答える
0

これは古い質問ですが、同じことをしようとしていたところ、検索中にこの質問に出会いました。解決策は見つかりませんでしたが、うまく機能するものを思いつきました。

あなたの例では、これを行うことができます:

class Box < ActiveRecord::Base
  has_many :balls do
    def self.extended(base)
      base.where_values += Ball.green.where_values
    end
  end
end

class Ball < ActiveRecord::Base
  belongs_to :box
  scope :green, where(:color => "green")
end

私はこれを行うことの意味を認識していませんが、いくつかの初期テストの後、問題なく動作するようです. 、、 などeager_load_values、設定できる値は他にもあります。join_valuesorder_values

于 2013-01-16T03:53:38.940 に答える
-1
default_scope :color, :conditions => { :color => "green"}

これを使って

于 2010-07-12T09:56:56.097 に答える