使用update_attribute并获取NoMethodError:未定义的方法`0 ='表示#

时间:2013-06-22 19:52:30

标签: ruby-on-rails ruby-on-rails-3 devise controller update-attribute

问题陈述

在我的控制器中,我尝试使用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 here的文档。

代码

/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

1 个答案:

答案 0 :(得分:2)

更改以下行

resource.update_attribute(resource.not_registered, "1") # this is where I get my error message

resource.update_attribute(:not_registered, "1") # this is where I get my error message

并阅读一些可靠的Rails文档。我建议通过http://guides.rubyonrails.org/index.html