首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新AR模型上属性的属性?

如何更新AR模型上属性的属性?
EN

Stack Overflow用户
提问于 2013-01-25 15:13:42
回答 3查看 133关注 0票数 0

我正在使用the piggybak gem

我有一个产品q

代码语言:javascript
复制
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,该属性还有其他属性。

代码语言:javascript
复制
1.9.3p194 :010 > q.piggybak_sellable
 => nil 

这是在Rails Admin UI中分配的Product可用的属性示例。

代码语言:javascript
复制
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,但它不起作用:

代码语言:javascript
复制
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模型的回调中--这是值得的。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-26 02:11:20

所以看起来我需要做的就是将我的产品的piggybak_sellable属性设置为等于Piggybak::Sellable类的一个实例,可以这样做:

代码语言:javascript
复制
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> 
票数 0
EN

Stack Overflow用户

发布于 2013-01-25 15:25:41

如果您收到的错误消息指出对象已经存在,则可以使用更新属性。尝试如下所示:

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2013-01-25 16:51:25

正如marcamillion已经说过的,你的协会显然不存在,至少在某些情况下是不存在的。现在的问题是,当关联不存在时,您如何让它静默初始化,以便它不会中断。我会试着这样实现它:

代码语言:javascript
复制
( 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14517088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档