0

Rails の別のモデル内からモデル データをクエリする方法については、完全には明確ではありません。モデルには、has_many と belongs_to の関係があります。2 つのモデルは「Gear」と「line_item」です。Gear has_many line_items とLineItem belongs_to Gear。

私がやろうとしているのは、NULL または空白の cart_id (これはフィールドの 1 つです) を持つ Gear オブジェクトに属するデータベース内のすべての line_items をクエリし、その可用性を計算することです。この場合、ギアは line_item (start_date、end_date、start_hour、end_hour) に保存されている特定の日時に貸し出されるため、Ruby で高度なクエリをあまり実行していないので、Google で検索しましたが、今はわかりません。どのように使用すればよいか

次のようなギア モデルで列挙可能:

line_items.inject(0) {|line_item| line_item.where('line_items.cart_id' => NULL }

または、ギアモデルでスコープを次のように使用できるとします。

scope :availablegear, lambda { includes(:line_items).where('line_items.cart_id' => nil) }

両方の構文がおそらく正しくないことはわかっているので、何を使用し、どのように使用するかについて何らかの方向性を示すことができます。

ありがとう。

私のプロジェクトはRails 3.2.0、Ruby 1.9.4、およびMySQLを使用しています

提案された回答で編集

class Gear < ActiveRecord::Base
  attr_accessible :title, :size, :price, :sub_category_id, :user_id, :image, :image_a, :image_b, :image_c, :image_d, :image_e, :image_f, :image_g, :image_h, :image_i, :remote_image_url, :color, :year, :latefee, :cancellation, :minrental, :policy, :about, :address, :city, :state, :zip, :country, :latitude, :longitude, :gmaps
  ...some code omitted for brevity
  has_many :line_items
  scope :availablegear, joins(:line_items).where(:line_items => {:cart_id => nil})
  ...some code omitted for brevity

end

Rails コンソールを起動して ag = Gear.find(4) を実行してから g.availablegear を実行すると、次のエラーが表示されます: NoMethodError: undefined method `availablegear' for #

4

2 に答える 2

4

あなたが探しているクエリは

Gear.joins(:line_items).where(:line_items => {:cart_id => nil})

Gearクラスのスコープに入れることができます:

class Gear< ActiveRecord::Base
  scope :available, joins(:line_items).where(:line_items => {:cart_id => nil})
end

Rails Query Guideでさらにヘルプを見つけることができます(条件との結合については 11.3 を参照してください)。

于 2013-03-01T14:12:12.990 に答える
2

広告申込情報を取り戻そうとしている場合:

class Gear < ActiveRecord::Base
  has_many :line_items
end

class LineItem < ActiveRecord::Base
  belongs_to :gear

  scope :available, where(:cart_id => nil)
end

それからあなたがギアを持っているなら、あなたは電話することができます

gear.line_items.available

これは、に属し、gearを持たないラインアイテムを返しcart_idます。

于 2013-03-02T01:32:01.520 に答える