attributes方法返回所有属性的哈希值,其名称为键,属性值为值;我想利用这个方法,创建update_attributes(attributes)方法的新衍生物,让我们称之为jz_attributes(attributes)。
Update_attributes执行此操作:
def update_attributes(attributes)
self.attributes = attributes
save
end
jz_attributes(attributes)会做一些稍微不同的事情:
def jz_attributes(attributes)
debugger
self.attributes = attributes
#does something else
end
我想充分利用ActiveRecords 属性方法,但我遇到了麻烦:
def attributes
self.attribute_names.inject({}) do |attrs, name|
attrs[name] = read_attribute(name)
attrs
end
end
以下是终端的说法:
28 end
29 end
30
31 def jz_attributes(attributes)
32 debugger
=> 33 self.attributes = attributes
34 end
35
36
37 #inventory_to_increment.quantity = quantity.to_i
(rdb:1) p attributes
nil
(rdb:1) next
/Users/justinz/.gem/ruby/1.8/gems/actionpack-2.3.5/lib/action_controller/rescue.rb:162
rescue_action(exception)
我的控制器使用jz_attributes:
def cart2_update
@cart = find_cart
@cart.jz_attributes(params[:cart_item])
end
你看到任何明显我做错的事吗?的由于!
答案 0 :(得分:0)
我最近在构建订单系统时做了一些非常类似的事情。订单表单系统必须不断动态更新表单,但我不想将其保存到数据库,直到用户确认了所有内容。 (如税等)。
我认为你在正确的轨道上,但是从你在这里粘贴的内容看起来你试图将nil设置为属性?也许你可以完整地发布参数的索引?
假设你正在做类似的事情,为什么不传递属性=?它不会保存模型,只有update_attributes =应该保存它。如果你需要做一些你想用jz_attributes完成的属性周围的东西,也许你可以在它们到达之前操纵参数,或者通过其他方式实现这个目标?
def cart2_update @cart = find_cart @cart.attributes=(params[:cart_item]) end