2011-07-12 75 views
0

我正在處理控制器操作,我想要做的是修改數據庫中的記錄。如何使用Ruby on Rails更新數據庫的屬性2.3.9

我有以下代碼:

def save_reserve 
    @pnr = Pnr.find_by_email(params[:pnr][:email]) 
    if ([email protected]?) 
     @pnr.update_attributes(params[:pnr]) 
    else 
     @pnr = Pnr.new(params[:pnr]) 
     if @pnr.save 
     ... 
     else 
     ... 
     end 
    end 
    end 

爲什麼@pnr.update_attributes(params[:pnr])不起作用?

但是,如果我這樣做:

 @pnr.update_attribute(:name, params[:pnr][:name]) 
     @pnr.update_attribute(:lastname, params[:pnr][:lastname]) 
     @pnr.update_attribute(:phone, params[:pnr][:phone]) 
     @pnr.update_attribute(:addr, params[:pnr][:addr]) 

它的工作...我缺少的東西?

謝謝!

回答

3

model.update_attributes(hsh)與調用model.attributes = hsh; model.save實際上是一樣的 - 它受到對象的任何回調和驗證的影響。

model.update_attribute(field, value)直接更新數據庫中的該字段,而沒有任何回調或驗證正在運行。

如果您檢查返回值@pnr.update_attributes(params[:pnr])您可能會看到它是false。你應該有一個if [...]檢查這一點,就像你在你的save呼叫new分支你的電話

相關問題