【问题标题】:How to update only list of attributes Rails?如何仅更新 Rails 的属性列表?
【发布时间】:2014-07-07 02:36:21
【问题描述】:

有如下代码:

@owner = Owner.find(params[:id])
if @owner.update(owner_params)
  # Some actions
else
  render 'edit'
end

“所有者”模型具有姓名、电子邮件、电话和 2 个虚拟属性(用于 has_secure_password):密码和密码确认。我只想更新姓名、电子邮件和电话:

def owner_params
  params.require(:owner).permit(:name, :email, :phone)
end

但是当我尝试更新所有者时,我收到一条关于空白密码的消息,因为我在创建过程中使用了存在验证密码。请告诉我,是否可以仅更新通过其他验证的发送属性列表?提前致谢。

【问题讨论】:

  • hidden_field 怎么样?不确定..
  • 您是否使用设备进行身份验证?

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

改用#update_attributes。看起来#update 对所有参数运行验证(即使缺少参数)。

【讨论】:

  • updateupdate_attributes没有区别,update已经在rails 4中引入
  • 是的。接听前电池检查
【解决方案2】:

如果您使用Devise 进行身份验证,那么有一个名为update_without_password 的方法,这样做

@owner.update_without_password(owner_params)

【讨论】:

    【解决方案3】:

    希望这篇文章有所帮助。

    输入has_secure_password validations: false 可以,但您需要在它之后进行自定义验证

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 2012-04-24
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多