0

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

@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”导致数据库提交回滚。

仅当定义了属性而无需使用 if 块时,如何才能设置它们?

谢谢

4

2 回答 2

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块的情况下执行此操作的问题。

于 2012-06-28T17:40:04.887 回答
2

为什么不简化它

@group.update_attributes(params[:group])

这样,如果我们的值为零,它将不会被更新

于 2012-06-28T17:43:50.903 回答