2016-10-14 4 views
2

データを維持しながら配列から複数の行を作成できないようにポスト要求は、アクションを作成しますJSONを注文し、トランザクションテーブルに各注文の内部行を作成します。注文IDを格納した後、line_items配列に入り、格納するバリアントタイトルを取得します。レールまだ私は私のコントローラから始めましょう

それはうまくいきますが、もちろん、これは、実際にはそれのすべての項目で私に1つの注文を与えることを望むときに、順序で各項目の新しい行を作成します。

テーブルの列をハッシュの配列に変換するケースですか?または、私はこれを行う別の方法がないのですか?

+0

データは 'params [:line_items]'です。永続化したいが個々のレコードを必要としない場合は、(a)データベースがJSON構造をサポートしているか、(b)自動的に変換する 'serialize'レール機能を使用して、ハッシュを文字列に変換し、レコードを読み込んだときにそれを元に戻します。個人的には、OrderItem(order_itemsテーブル)に 'has_many'エントリがあるOrderモデルでは、 – SteveTurczyn

+0

params [:line_items]はハッシュ形式の各広告申込情報の情報で配列を返します(異なるハッシュのもの)。作業? – Dan

+0

はい、しかし、@ gokulmの答えを見てください。 – SteveTurczyn

答えて

3

あなたは次の関係を持つ2つのモデルTransactionItemを作成することができます。

トランザクション

has_many :items 

項目

belongs_to :transaction 

お使いのコントローラのアクション:

def create 
    @order = Transaction.new 
    @order.shopifyid = params[:id] 
    this_order = params[:line_items] 
    this_order.each do |this| 
     @order.items.new(#Item attributes) 
    end 
    @order.save 
end 

このようにして、商品表にvariant_titleとすることができます。

0

私はshopyifyに詳しくはありませんが、Transaction.new呼び出しを行った結果として1行のアイテムごとに新しいオブジェクトを作成しているという事実に関係しているようです。これを整理するもう1つの方法は、広告申込情報用に別のテーブルを用意することです。このハッシュアイテムのハッシュをデータベースに保存することはできますが、広告申込情報に基づいて何らかの種類のクエリを実行し、すべてのトランザクションでこの列をシリアル化するプロセスを実行することが効率的なソリューションではない可能性があります。 Gokuの解決策は、私が参照しているものに沿っています

関連する問題