【问题标题】:Validation problems on manual update of attribute value in Rails consoleRails 控制台中手动更新属性值的验证问题
【发布时间】:2013-02-27 11:22:48
【问题描述】:

我有一个简单的问题。我想在 Rails 控制台中更改我的 User.find(1) 的一些字段值。

我试过了:

u = User.find(1)
u.update_attributes(roles_mask: 3)

并返回了false。当我检查u.errors.full_messages 时,我发现这是因为has_secure_password 的密码验证存在问题。如何在控制台中手动更新?

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

如果你想绕过验证,使用

# skip validations but run callbacks
u.update_attribute :roles_mask, 3

# do the update on the sql so no validation and callback is executed
u.update_column :roles_mask, 3

【讨论】:

  • 为了完整起见,在 Rails 4 中您可以使用 u.update_attributes(roles_mask: 3, password: 'password') 但您需要知道密码才能一次设置多个参数。
【解决方案2】:

你必须先验证用户,然后你可以更新用户看看here

u = User.find(1)
u.authenticate("password")
u.update_attributes(roles_mask: 3)

或者,如果您想跳过验证,您可以执行以下操作;

u = User.find(1)
u.update_attribute :roles_mask, 3

【讨论】:

    【解决方案3】:

    你可以试试update_attribute(:roles_mask, 3)update_column(:roles_mask, 3)

    【讨论】:

      【解决方案4】:

      你可以有这样的东西

      Post.find(1).comments.first.update(body: "hello")
      

      @u = Post.find(1)
      @u.comments.first.update(body: "hello")
      

      其中 cmets 是注释表的名称,body 是注释表中列的名称。

      这适用于您有嵌套属性时

      post.rb

      has_many: comments
      accept_nested_attributes_for: comment
      

      comment.rb

      belongs_to: post
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-29
        • 1970-01-01
        • 2021-06-24
        • 2012-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-20
        相关资源
        最近更新 更多