【问题标题】:Ruby on Rails: Update AttributeRuby on Rails:更新属性
【发布时间】:2014-04-14 00:37:10
【问题描述】:

Google 现在严重让我失望。我需要做的就是从 Heroku rails 控制台更新一个属性,将用户设置为管理员。

我找不到一个简单的答案。我一直在尝试的是:

Record.update_attribute(:roles_mask, "1")

其中记录是正确的记录。

'未定义的方法'更新属性''

我不能只输入Record.roles_mask = 1

编辑。

我使用了 Record,我不应该在示例中这样做。我所做的正是这样:

ian = User.where(:id => '5')

ian.update_attribute(:roles_mask, '1')

Error: undefined method 'update_attributes'

【问题讨论】:

  • 您是要更新一个还是全部?
  • 在记录类的instance 上调用update_attribute,而不是在Record 类上。 update_attribute 是实例方法而不是类方法。
  • 尝试使用update_columns 而不是update_attributes
  • 如果更新一个record = Record.find(...); record.update_attribute(:roles_mask, "1")。如果全部更新,Record.update_all(:roles_mask, "1")

标签: ruby-on-rails heroku rails-console


【解决方案1】:

Where 子句返回一个数组,而您试图对数组进行更新查询,这就是您出错的原因。

你应该尝试找出第一条记录

ian = User.where(:id => 1).first
or
ian = User.find(1)
or
ian = User.find_by_id(1)

现在您的更新查询将起作用。

ian.update_attribute(:roles_mask, '1')

【讨论】:

    【解决方案2】:

    问题在于使用.where 函数会创建关系,而不是查找记录本身。这样做:

    ian = User.find(5)
    ian.update_attribute(:roles_mask, '1')
    

    或者如果你想使用.where,那么你可以这样做:

    ian = User.where(:id => 5)
    ian.first.update_attribute(:roles_mask, '1')
    

    编辑

    请参阅this answer 了解为什么会发生这种情况的详细信息。

    【讨论】:

    • 作为未来谷歌搜索的旁注,另一个问题是我使用的变量受到保护。我不得不允许批量分配。 attr_accessible :roles_mask。感谢您的回复。
    【解决方案3】:

    要使用 update_attribute(或 update_attributes),您需要从实例而不是类中调用它。

    rails c> rec = Record.find(1)
    rails c> rec.update_attribute(:att, 'value')
    rails c> rec.update_attributes(att: 'value', att2: 'value2')
    

    我认为这应该可以解决您的问题。

    【讨论】:

    • 不起作用。我有 ian = User.where(:id => '5') ian.update_attribute(:roles_mask, '1') 错误:未定义的方法 'update_attribute' 另外,感谢您的回复。为了记录,我只尝试更新 1 条记录。
    • 问题是 where() 返回一个 ActiveRecord 关系。尝试以下任一方法:ian = User.find(5) 或 ian = User.where(id: 5).first ... 忽略。刚刚看到@Mike Slutsky 说了这么多。
    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2011-03-17
    • 2014-08-27
    • 1970-01-01
    相关资源
    最近更新 更多