0

piggybak gemを使用しています。

私は製品を持っていますq:

1.9.3p194 :009 > q
 => #<Product id: 20, name: "iPad", description: "<p>\r\n\tiPad 11&quot; tablet that will change the way...", price: 499.0, vendor_id: 11, created_at: "2012-12-15 23:40:27", updated_at: "2013-01-01 00:18:39", image: "ipad.png", sku: "AB-09123"> 

q他の属性を持つ属性piggybak_sellableがあります。

1.9.3p194 :010 > q.piggybak_sellable
 => nil 

Productこれは、Rails 管理 UI で割り当てられた に使用できる属性の例です。

1.9.3p194 :011 > p.piggybak_sellable
 => #<Piggybak::Sellable id: 1, sku: "AR4590", description: "Blue Shirt", price: #<BigDecimal:7ffa1ba863b8,'0.2499E2',18(45)>, quantity: 100, item_id: 19, item_type: "Product", active: true, unlimited_inventory: false> 

nilそれらの属性をレコードに追加したいと思います。

q.piggybak_sellable手動で行う必要なく、これらすべての属性を更新したいと思います。つまりq.piggybak_sellable.sku = "ARJHR"、設定など.

私はやってみましたが、うまくいきupdate_attributesませんでした:

1.9.3p194 :008 > q.piggybak_sellable.update_attributes(:sku => "YJ4567", :description => "Awesome tablet", :price => 399, :quantity => 100, :item_id => 20, :item_type => "Product", :active => true)
NoMethodError: undefined method `update_attributes' for nil:NilClass

どうすればこれを行うことができるかについて考えていますか?

これをモデルのコールバックに入れようとしていますProduct-それが価値があるためです。

ありがとう。

4

3 に答える 3

0

属性の更新は、受け取ったエラー メッセージが示すように、オブジェクトが既に存在する場合に機能します。次のようなことを試してください:

1.9.3p194 :008 > q.piggybak_sellable.create(:sku => "YJ4567", :description => "Awesome tablet", :price => 399, :quantity => 100, :item_id => 20, :item_type => "Product", :active => true)
于 2013-01-25T07:25:40.800 に答える
0

したがって、私がする必要があるのは、私の製品の属性を、次のように実行できるクラスpiggybak_sellableのインスタンスと等しくなるように設定することです。Piggybak::Sellable

1.9.3p194 :006 > m.piggybak_sellable = Piggybak::Sellable.new({:sku => "YJ4567", :description => "Awesome tablet", :price => 399, :quantity => 50, :item_id => 20, :item_type => "Product", :active => true})
   (0.3ms)  begin transaction
  Piggybak::Sellable Exists (18.7ms)  SELECT 1 AS one FROM "sellables" WHERE "sellables"."sku" = 'YJ4567' LIMIT 1
  SQL (29.6ms)  INSERT INTO "sellables" ("active", "description", "item_id", "item_type", "price", "quantity", "sku", "unlimited_inventory") VALUES (?, ?, ?, ?, ?, ?, ?, ?)  [["active", true], ["description", "Awesome tablet"], ["item_id", 20], ["item_type", "Product"], ["price", #<BigDecimal:7fa97c8f29d8,'0.399E3',9(36)>], ["quantity", 50], ["sku", "YJ4567"], ["unlimited_inventory", false]]
   (2.7ms)  commit transaction
 => #<Piggybak::Sellable id: 3, sku: "YJ4567", description: "Awesome tablet", price: #<BigDecimal:7fa97cf2ec98,'0.399E3',9(36)>, quantity: 50, item_id: 20, item_type: "Product", active: true, unlimited_inventory: false> 
于 2013-01-25T18:11:19.957 に答える
0

マーカミリオンがすでに述べたように、少なくとも場合によっては、あなたの関連付けは明らかに存在しません。ここでの問題は、関連付けが存在しないときに壊れないように、サイレントに初期化するにはどうすればよいかということです。私はこのようにそれを達成しようとします:

( q.piggybak_sellable || q.build_piggyback_sellable ).
update_attributes(:sku => "YJ4567", :description => "Awesome tablet", 
                  :price => 399, :quantity => 100, :item_id => 20, 
                  :item_type => "Product", :active => true)
于 2013-01-25T08:51:24.580 に答える