問題文
私のコントローラでは、not_registered
を使用して Updateでブール属性を変更しようとしてresource.update_attribute(resource.not_registered, 1)
いますが、 を取得していNoMethodError: undefined method 0= for #<User:0x007fe470de2950
ます。なぜこれが起こっているのですか?これは、このプロジェクトを完了する前に解決する必要がある最後のバグであり、RoR での最初の作業になります!
私の進歩
save
代わりに使用することを検討しましたが、検証をスキップする必要があるため使用できません。また、1 つの属性しか更新していないため、効率が悪いようです- シェルでは、
resource
(Devise によって作成された) は現在のユーザーのインスタンスのように見えます - 正しいUpdate controller
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