黑客活动记录,我如何利用属性方法?

时间:2010-01-30 19:09:27

标签: ruby-on-rails activerecord attributes

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

你看到任何明显我做错的事吗?的由于

1 个答案:

答案 0 :(得分:0)

我最近在构建订单系统时做了一些非常类似的事情。订单表单系统必须不断动态更新表单,但我不想将其保存到数据库,直到用户确认了所有内容。 (如税等)。

我认为你在正确的轨道上,但是从你在这里粘贴的内容看起来你试图将nil设置为属性?也许你可以完整地发布参数的索引?

假设你正在做类似的事情,为什么不传递属性=?它不会保存模型,只有update_attributes =应该保存它。如果你需要做一些你想用jz_attributes完成的属性周围的东西,也许你可以在它们到达之前操纵参数,或者通过其他方式实现这个目标?

def cart2_update
        @cart = find_cart
        @cart.attributes=(params[:cart_item])
end