2016-07-10 6 views
0

現在、Order、OrderItems、およびProductsモデルがあります。 OrderItemsに小計と呼ばれるメソッドを定義して、数量の値と価格の積をproduct.priceという関係で返します。Railsでのモデルメソッドの定義

どうすれば達成できますか?私は関係を通して列と列にアクセスする方法を知らない。あなたの助けのための

class OrderItem < ActiveRecord::Base 
belongs_to :order 
belongs_to :product 

validates :order_id, presence: true 
validates :product_id, presence: true 

def subtotal 
    quantity * product.price 
end 
end 

表スキーマ

create_table "order_items", force: :cascade do |t| 
t.integer "product_id" 
t.integer "order_id" 
t.integer "quantity" 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
end 

感謝。 OrderItemsと製品との関係についてはほとんどわからない

+0

は、少なくともここで 'OrderItems'テーブルのスキーマを投稿することを検討してください。 – developer033

+0

ありがとうございました。 –

+0

私はあなたのテーブルの列を意味します... – developer033

答えて

0

しかし、あなたはあなたのmodels/OrderItems.rbbelongs_to: productsをやった場合、あなたは単に、次のように私はあなたの注文のモデルで考えるquantity * product.price

+0

これは私が最初にやったものですが、 NilClass ** .. –

+0

これは、数量がOrderItemに設定されていないことを意味します。 OrderItemモデルで 'quantity'のバリデーションを追加することをお勧めします。 何かのように 'validates_numericality_of:quantity、only_integer:true、greater_than:0' –

+0

あなたはそれを持っています!これは、数量が設定されていないアイテムがいくつかあるために起こっていました。どうもありがとう :) –

0

はあなたが関係を持って行うことができます

has_many :order_items 

したがって、データベースから注文行を取得する場合は、合計を計算するために次のコードを使用できます。

OrderItemクラスでtotal_priceというメソッドを定義します。

def total_price 

    tot_price = self.product.price * self.quantity 

    tot_price 
end 

は、次のようにあなたはそれを呼び出すことができます

order = Order.first 
total_price = order.order_items.sum(&:total_price) 
関連する問題