Использование update_attribute и получение NoMethodError: неопределенный метод `0='для # <пользователя: 0x007fe470de2950

Постановка задачи

В моем контроллере я пытаюсь изменить логический атрибут not_registered в обновлении используя resource.update_attribute(resource.not_registered, 1), но получаю NoMethodError: undefined method 0= for #<User:0x007fe470de2950, Есть идеи, почему это происходит? Цените любые идеи, которые у вас могут возникнуть, это последняя ошибка, которую мне нужно устранить перед завершением этого проекта, который будет моим первым в RoR!

Мой прогресс

  • Я смотрел на использование save вместо этого, но не могу, потому что мне нужно пропустить проверку. Также кажется неэффективным, так как я обновляю только один атрибут
  • В оболочке, 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

1 ответ

Решение

Изменить следующую строку

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

Другие вопросы по тегам