0

我正在处理控制器操作,我想做的是修改数据库中的记录。

我有以下代码:

def save_reserve
    @pnr = Pnr.find_by_email(params[:pnr][:email])
    if (!@pnr.blank?)
      @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])

它有效......我错过了什么吗?

谢谢!

4

1 回答 1

3

model.update_attributes(hsh)实际上与调用相同model.attributes = hsh; model.save- 它受对象上的任何回调和验证的影响。

model.update_attribute(field, value)直接更新数据库中的该字段,而不运行任何回调或验证。

如果您检查返回值,@pnr.update_attributes(params[:pnr])您可能会看到它是false. 您应该以与在您的 cose 分支中进行呼叫if [...]相同的方式检查此问题savenew

于 2011-07-12T17:20:28.873 回答