Использование 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