Rails 3 - 在更新之前检查该对象是否对params有效

Exi*_*iRe 21 ruby validation ruby-on-rails ruby-on-rails-3

我有一个非常新手的问题.在更新之前,如何检查模型对象是否对新参数有效?

我希望改造:

def update
  @obj = SomeModel.find( params[:id] )

  if @obj.update_attributes( params[:obj] )
    # That have been updated
  else
    # Ups, errors!
  end
end
Run Code Online (Sandbox Code Playgroud)

对于这样的事情:

def update
  @obj = SomeModel.find( params[:id] )

  if @obj.valid_with_new_params( params[:obj] )
    @obj.update_attributes( params[:obj] )
  else
    # Ups, errors!
  end
end
Run Code Online (Sandbox Code Playgroud)

Jus*_*tin 40

要更新属性而不保存它们,您可以使用

@obj.assign_attributes( params[:obj] )
Run Code Online (Sandbox Code Playgroud)

然后检查对象是否有效,你可以打电话

@obj.valid?
Run Code Online (Sandbox Code Playgroud)

如果对象是不是有效的,你可以看到错误(只打完电话后.valid?拨打)

@obj.errors
Run Code Online (Sandbox Code Playgroud)

如果对象有效的,你可以通过调用保存

@obj.save
Run Code Online (Sandbox Code Playgroud)

但是,所有这一切通常都没有必要.如果对象无效,则ActiveRecord不会将对象保存到数据库,因此在您离开控制器操作时会忘记所有属性更改.

此外,由于无效记录将不会保存到数据库,因此您始终可以再次调用Object.find()以获取原始对象.

  • 在@ obj.attributes(params [:obj])之后,调用@ obj.save. (4认同)