问题陈述
在我的控制器中,我正在尝试使用 更改not_registered
更新中的布尔属性resource.update_attribute(resource.not_registered, 1)
,但正在获取NoMethodError: undefined method 0= for #<User:0x007fe470de2950
. 知道为什么会这样吗?感谢您可能有的任何想法,这是我在完成这个项目之前需要解决的最后一个错误,这将是我在 RoR 中的第一个!
我的进步
- 我考虑
save
改用,但不能,因为我需要跳过验证。也似乎效率低下,因为我只更新一个属性 - 在 shell 中,
resource
(由 Devise 创建)似乎是当前用户的一个实例 - 在执行更新控制器之前
resource.not_registered => 0
,这是正确的......所以我知道这resource.not_registered
是正确的语法。 - 如果我跑步
resource.update_attribute
,我会得到!! #<ArgumentError: wrong number of arguments (0 for 2)>
……所以我知道它update_attribute
作为一种方法存在resource
- 最后,我在这里找到了 update_attribute 的文档。
代码
/app/controllers/registrations_controller.rb:
class RegistrationsController < Devise::RegistrationsController
def update
if resource.update_with_password(params[resource_name])
resource.update_attribute(resource.not_registered, "1") # this is where I get my error message
set_flash_message :notice, :updated
sign_in resource_name, resource, :bypass => true
redirect_to after_update_path_for(resource)
else
clean_up_passwords(resource)
render "edit"
end
end
# Code removed for brevity
end
/app/models/user.rb:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :token_authenticatable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
attr_accessible :email, :password, :password_confirmation,
:remember_me, :not_registered, :pay_method, :pay_desc, :email_instructions, :current_password
def update_with_password(params={})
# code removed for brevity
end
end