2016-08-12 1 views
0

製品/カートのシナリオではsimple_formを設定しようとしていますが、一般的なシナリオとは少し異なります。私のディスプレイは、利用可能なすべての製品をリストし、それぞれに数量を入力する必要があります。保存すると、cart_itemsには、数量が指定されている商品についてのみ、cart_id,product_id、およびqtyを保存する必要があります。Railsシンプルフォームアソシエーションすべての可能なオブジェクトのアブノーマル

class Cart < ApplicationRecord 
    has_many :cart_items 
    has_many :products, through: :cart_items 
    accepts_nested_attributes_for :cart_items 
end 

カートのアイテム:

class CartItem < ApplicationRecord 
    belongs_to :cart 
    belongs_to :product 
end 

製品:

class Products < ApplicationRecord 
    has_many :cart_items 
    has_many :carts, through: :cart_items 
end 
それは空白ですかゼロならば、それは cart_items

カートに追加すべきではありません

私のような私のフォームの表示を持ってしようとしている: [ x ] (Qty) Product Name [ x ] (Qty) Product Name [ x ] (Qty) Product Name [ x ] (Qty) Product Name

私はf.association :cart_items, collection: Products.all()を使用して数量のための余分なフィールドを取得するかどうかはわかりません、と私はこの試みた:

<%= f.simple_fields_for :cart_items do |fa| %> 
    <%= fa.association :product, as: :select %> 
    <%= fa.input :qty %> 
<% end %> 

しかし、それを既存の関連付けを表示するだけでなく、選択したリストに商品を表示するのに対して、すべての商品をリストし、関連する数量を表示したいと考えています。

私が見落としているような素晴らしい "Rails-y"の方法がありますか、コントローラとビューで手動で操作する必要がありますか?私はRails 5を使用しています。

答えて

1

私は特別な "Rails-y"方法はないと思っています。 simple_fields_forタグの前に、すべての商品をループして欠落した商品のcart_itemsを作成する必要があると思います。商品があるカートアイテムが既に存在する場合は、それを表示します。それ以外の場合は、最初にビルドしてから表示します。

また、数量が不足している場合はcart_itemsの拒否を追加する必要があります。このようなもの:

​​

これはトリックを行う必要があります。

+0

ありがとうございました! (私がグーグルで答えを見つけたので、ここで前の質問を削除しました) – Ryan

関連する問題