2017-08-21 7 views
0

私はモデルOrdersと2人の子供Itemsfulfillmentsを持っています。Railsは2つの子モデルの設定を調整します

fulfillmentが作成されたら、Items.fulfillment_completeをtrueに設定する必要があります。

コントローラーでこれを設定するのが最適ですか?

current_order.fulfillment.save current_order.items(fulfillment_complete: true)

か、その1は、MVCの慣行に従っていることを確認するためにこれを行うには良い方法があります。

+0

モデル名は通常単数形です。注文品目ごとに1つのフルフィルメントがありますか(「品目」は製品+数量+カスタム化のようなもので、製品自体ではないと仮定します)、または全体のオーダーに対して1つのフルフィルメントですか?いずれにしても、関係自体の存在を使用するだけではないのですか? –

+0

基本的には、他のデータの存在/状態を反映するためにデータ(この場合は「bool」)を格納することによって、 'キャッシング 'を実行しようとしています。この情報をキャッシュしないようにしてください( 'Item#fulfilled? 'は' self.fulfillments.exists? 'の結果を返します)。 - キャッシングの問題は、キャッシュを行うためのデータを作成するには、必要なときに必ずこのキャッシュを無効にすることをお勧めします。 – MrYoshiji

+0

'Item'と' Fulfillment'モデルの詳細を教えてください。それで、あなたが望むものと正しい解決方法を理解することがはるかに簡単になります。 – zauzaj

答えて

0

FulfillmentItemOrderの両方の子供がいる場合、それらが満たされているかどうかを問い合わせるときに、あなたのitemsが親Orderに委任することができます。

class Item < ApplicationRecord 
    belongs_to :order 

    scope :fulfilled, -> { includes(order: :fulfillment).where.not(fulfillments: { order_id: nil }) 

    def fulfilled? 
    order.fullfillment.present? 
    end 
end 

これにより、フルフィルメントステータスに関する真実の情報源が1つしかないことが保証されます。

関連する問題