0

製品と注文の 2 つのモデルがあります。

Product
 - cost
 - id

Order
 - cost
 - product_id

誰かが注文するたびに、「新規注文」フォームのラジオ ボタンの値から product_id を取得します。

新しい注文を作成するとき、コントローラで order.cost を order.product.cost に設定する必要があります。論理的には、コードは次のようになるはずだと思いました。

def create
...
   @order.cost == @order.product.cost
...
end

しかし、私はそれをまったく機能させることができないようです。そのため、ここで質問します。

質問に答える(または名前を付ける)助けがあれば大歓迎です。

4

2 に答える 2

0

間違った構文

@order.cost == @order.product.cost #it will compare the product cost & order cost & return boolean value true ot false

そのはずです

@order.cost = @order.product.cost

モデルに関連付けを適切に記述したとすると、次のようになります。

product.rb

has_many :orders

order.rb

belongs_to :product
于 2010-04-12T03:36:32.863 に答える
0

別のオプションは Order モデルで before_create を指定することですが、これはすべての Order をこの方法で作成する必要がある場合にのみ機能します。

class Order < ActiveRecord::Base
  has_many :products 
    #this could be has_one if you really want only one product per order
  accepts_nested_attributes_for :products
    #so that you can do Order.new(params[:order])
    #where params[:order] => [{:attributes_for_product => {:id => ...}}] 
    #which is handled by fields_for in the view layer.

    #has_one would make this :product

  before_create :calculate_order_cost_from_product 
    #only run on the first #save call or on #create

  def calculate_order_cost_from_product
      self.cost = self.products.first.cost 
       #this could also be self.products.sum(&:cost) 
       #if you wanted the total cost of all the products

       #has_one would be as you had it before:
       #self.cost = self.product.cost
  end

end
于 2010-04-12T04:20:18.607 に答える