如果定义了参数,如何更新属性?

时间:2012-06-28 17:36:22

标签: ruby-on-rails ruby-on-rails-3 activerecord activemodel

目前在我的更新控制器方法中我有:

@group.attributes = {
  :title => params[:group][:title],
  :description => params[:group][:description],
  :password_required => params[:group][:password_required],
  :password => params[:group][:password],
  :archived => params[:group][:archived]
}

问题是这个方法在多个地方使用,并且并不总是传递所有这些参数,这导致“nil”导致db commit回滚。

如何定义属性,只有在定义属性时才需要使用if?

由于

2 个答案:

答案 0 :(得分:3)

可能会做这样糟糕的事情:

@group.attributes = {
  :title => params[:group][:title] || @group.title,
  :description => params[:group][:description] || @group.description,
  :password_required => params[:group][:password_required] || @group.password_required,
  :password => params[:group][:password] || @group.password,
  :archived => params[:group][:archived] || @group.archived
}

不建议使用这种丑陋的代码,但它解决了如何在没有明确if块的情况下执行此操作的问题。

答案 1 :(得分:2)

为什么不用

简化它
@group.update_attributes(params[:group])

这样一来,如果价值我们不会更新