2016-07-10 2 views
0

현재 Order, OrderItems 및 Products 모델이 있습니다. OrderItems에 소계라고하는 메소드를 정의하려고합니다.이 메소드는 수량 값에 가격 (관계 product.price를 통해)을 리턴합니다.레일에서 모델 메소드 정의하기

어떻게 수행 할 수 있습니까? 관계를 통해 열과 행에 액세스하는 방법을 모른다. 당신의 도움에 대한

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' 테이블의 적어도 스키마 여기 게시물을 고려해 다음과 같이

def total_price tot_price = self.product.price * self.quantity tot_price end 

당신은 그것을 호출 할 수 있습니다. – developer033

+0

고맙습니다, 끝났습니다 ... –

+0

나는 테이블의 열을 의미합니다 ... – developer033

답변

0

하지만 당신은 당신의 models/OrderItems.rbbelongs_to: products을 한 적이 있다면, 당신은 단순히 다음과 같이 나는 당신의 주문 모델에서 생각 quantity * product.price

+0

그게 내가 처음에 한 짓이야,하지만 오류가있어 ** 정의되지 않은 메서드'* 'nil : NilClass ** .. –

+0

즉, 수량이 OrderItem에 설정되어 있지 않다는 의미입니다. OrderItem 모델에서'quantity'에 유효성 검사를 추가하는 것이 좋습니다. 같은 것 'validates_numericality_of : 수량, only_integer : true, greater_than : 0' –

+0

가져 왔습니다! 수량 설정이없는 항목이 있기 때문에 이런 일이 발생했습니다. 고마워요 :) –

0

당신이 관계를 가지고 할 수있는

has_many :order_items 

따라서 데이터베이스에서 주문 행을 가져 오면 총계를 계산할 때 다음 코드를 사용할 수 있습니다.

OrderItem 클래스에 total_price라는 메서드를 정의하십시오.

order = Order.first 
total_price = order.order_items.sum(&:total_price)