2010-01-30 36 views
1

屬性方法返回所有屬性的散列,其名稱爲鍵,屬性的值爲值;我想利用這種方法,創建update_attributes(attributes)方法的新派生,可以稱它爲jz_attributes(attributes)。黑客活動記錄,我該如何利用屬性方法?

update_attributes方法做到這一點:

def update_attributes(attributes) 
    self.attributes = attributes 
     save 
    end 

而且jz_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

我最近在構建訂單表單系統時做了一些非常類似的事情。訂單表單系統必須隨着更改動態更新表單,但我不想將其保存到數據庫,直到用戶確認了所有內容。 (如稅收等)。

我認爲你在正確的軌道上,但從你粘貼​​在這裏看起來像你試圖設置零屬性?也許你可以發佈完整的請求的參數?

假設你正在做類似的事情,爲什麼不傳遞屬性=?它不會保存模型,只有update_attributes =應該在此時保存它。如果你需要做一些其他的屬性=你想用jz_attributes來完成的事情,也許你可以在參數到達那裏之前操作參數,或者通過其他方式來實現這個目標?

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