【问题标题】:Why does "user.role.save" return NoMethodError in Rails?为什么“user.role.save”在 Rails 中返回 NoMethodError?
【发布时间】:2025-12-15 08:00:02
【问题描述】:

我正在尝试将用户角色从 standard 更改为 admin。这是我迄今为止一直在尝试的,我相信我已经接近了。

User.last
#=> #<User id: 3, email: "c@c", role: 0> 

# set variable user to User.last
user = User.last

user.role
#=> "standard"

user.role=1
#=> 1

user.role
#=> "admin"

user.role.save 

NoMethodError: "admin":String 的未定义方法 `save'

还有更多的 Ruby 输出,但这似乎是重要的一行。显然我正在将角色从standard 更改为admin,但我只是不确定如何保存它。

【问题讨论】:

  • 你应该打电话给user.save
  • 你的模型对象是user而不是user.role,后者是属性,需要在模型对象上调用save-更多解释*.com/questions/39178261/…跨度>
  • Ahhhhhh 所以我在user 对象上调用save 而不是role。也谢谢你,成功了。

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


【解决方案1】:

方法链并不总是返回您认为它们所做的事情。如有疑问,请分开!

在您的情况下,user.role 返回一个未实现 #save 方法的字符串。相反,您想调用模型的 User#save 方法。所以:

user = User.last
user.role = 1
user.save

当然还有其他方法可以做到这一点,但上面的示例应该可以解决您的问题,同时还可以解释为什么您的原始代码引发了 NoMethodError 异常。

【讨论】: