2016-08-26 14 views
0

私は、次のような関係があります。Rails - 親モデルは、それに属するモデルの属性値を検証できますか?私のアプリで

  • 順序があり、多くのORDER_ITEMSを
  • ORDER_ITEMつの製品
  • ORDER_ITEMは、数量のプロパティを(ユーザー 順序でどのくらい?)ありあり
  • そして最後に、製品が注文を提出する前に財産の株式(どのくらい残っている?)

を持って、私はそれを確認します注文数量を満たすのに十分な在庫がありますが、私はこの検証をどこで行うべきかわかりません。

私は更新アクションの前に在庫レベルをチェックし、更新前のアクションを持っている瞬間:

def check_stock 
    check_results = @order.order_items.collect do |item| 
    if (item.product.stock < item.quantity) 
     flash.now[:danger] = "Sorry, it looks like we're out of some of those things" 
     false 
    else 
     true 
    end 
    end 

    if check_results.include?(false) 
     render "show" 
     return false 
    else 
     @order.order_items.each do |item| 
      item.remove_stock   
     end 
    end 
end 

それはそれは更新アクションの仕事とブロックだんが、それは非常にエレガントではありません。誰かがより良い方法を知っていますか?フォームを操作することによってorder_itemの数量値を検証する方法があるように感じるようですが、実際にどうやってどうやって行くのかは分かりません。

答えて

1

2.2 validates_associatedを見ては、大まかなアイデアは、あなたがvalidate_stockのような機能を何かの下にorder_item.rbにitem.product.stock < item.quantityを移動し、それを変更します

、このようなものであるhttp://guides.rubyonrails.org/active_record_validations.html

に説明しましたitem.product.stock >= item.quantity。そして、それは私が探していたまさにです、素晴らしいごorder.rb

+0

validates_associated :order_itemsを追加し

をorder_item.rbするvalidate :validate_stockを追加します。ありがとう! –

関連する問題