为什么" user.role.save"在Rails中返回NoMethodError?

时间:2016-08-28 18:57:08

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

我正在尝试将用户的角色从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:未定义的方法`save&#39; for&#34; admin&#34;:String

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

1 个答案:

答案 0 :(得分:2)

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

在您的情况下,user.role返回一个String,它没有实现#save方法。相反,您想要调用模型的User#save方法。所以:

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

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