在Devise中获取NoMethodError :: RegistrationsController #create

尝试添加新用户,使用设计gem运行rake db:migrate并再次运行rails服务器

但当我输入3000 / posts / sign_up

它给了我默认的注册屏幕,但是当我尝试创建一个用户时,我得到了

Devise中的NoMethodError :: RegistrationsController#为#创建未定义的方法`encrypted_pa​​ssword =’

我的日志显示

Started POST "/posts" for 127.0.0.1 at 2014-03-18 20:38:22 +0000 Processing by Devise::RegistrationsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"2uO2ttqAfK1a2C855cZOpDTsS2Duc7ZzVJxAQ5ObL8M=", "post"=>{"email"=>"neil@example.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"} Completed 500 Internal Server Error in 79ms NoMethodError (undefined method `encrypted_password=' for #): activemodel (4.0.4) lib/active_model/attribute_methods.rb:439:in `method_missing' activerecord (4.0.4) lib/active_record/attribute_methods.rb:167:in `method_missing' devise (3.2.2) lib/devise/models/database_authenticatable.rb:42:in `password=' activerecord (4.0.4) lib/active_record/attribute_assignment.rb:42:in `public_send' activerecord (4.0.4) lib/active_record/attribute_assignment.rb:42:in `_assign_attribute' activerecord (4.0.4) lib/active_record/attribute_assignment.rb:29:in `block in assign_attributes' activerecord (4.0.4) lib/active_record/attribute_assignment.rb:23:in `each' activerecord (4.0.4) lib/active_record/attribute_assignment.rb:23:in `assign_attributes' 

new.html.erb

 

Sign up

resource_name, :url => registration_path(resource_name)) do |f| %>

true %>


post.rb

 class Post < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable end 

耙路线

 Prefix Verb URI Pattern Controller#Action new_post_session GET /posts/sign_in(.:format) devise/sessions#new post_session POST /posts/sign_in(.:format) devise/sessions#create destroy_post_session DELETE /posts/sign_out(.:format) devise/sessions#destroy post_password POST /posts/password(.:format) devise/passwords#create new_post_password GET /posts/password/new(.:format) devise/passwords#new edit_post_password GET /posts/password/edit(.:format) devise/passwords#edit PATCH /posts/password(.:format) devise/passwords#update PUT /posts/password(.:format) devise/passwords#update cancel_post_registration GET /posts/cancel(.:format) devise/registrations#cancel post_registration POST /posts(.:format) devise/registrations#create new_post_registration GET /posts/sign_up(.:format) devise/registrations#new edit_post_registration GET /posts/edit(.:format) devise/registrations#edit PATCH /posts(.:format) devise/registrations#update PUT /posts(.:format) devise/registrations#update DELETE /posts(.:format) devise/registrations#destroy posts GET /posts(.:format) posts#index POST /posts(.:format) posts#create new_post GET /posts/new(.:format) posts#new edit_post GET /posts/:id/edit(.:format) posts#edit post GET /posts/:id(.:format) posts#show PATCH /posts/:id(.:format) posts#update PUT /posts/:id(.:format) posts#update DELETE /posts/:id(.:format) posts#destroy about GET /about(.:format) pages#about root GET / pages#welcome 

铁路g

 Neils-MacBook-Pro:prospects neilpatel$ rails g devise:views invoke Devise::Generators::SharedViewsGenerator create app/views/devise/shared create app/views/devise/shared/_links.erb invoke form_for create app/views/devise/confirmations create app/views/devise/confirmations/new.html.erb create app/views/devise/passwords create app/views/devise/passwords/edit.html.erb create app/views/devise/passwords/new.html.erb create app/views/devise/registrations create app/views/devise/registrations/edit.html.erb create app/views/devise/registrations/new.html.erb create app/views/devise/sessions create app/views/devise/sessions/new.html.erb create app/views/devise/unlocks create app/views/devise/unlocks/new.html.erb invoke erb create app/views/devise/mailer create app/views/devise/mailer/confirmation_instructions.html.erb create app/views/devise/mailer/reset_password_instructions.html.erb create app/views/devise/mailer/unlock_instructions.html.erb Neils-MacBook-Pro:prospects neilpatel$ rails generate devise Post invoke active_record create db/migrate/20140318202353_add_devise_to_posts insert app/models/post.rb route devise_for :posts Neils-MacBook-Pro:prospects neilpatel$ rake db:migrate 

主要问题在这里

 NoMethodError (undefined method `encrypted_password=' for #): 

看看你的迁移文件。 是否存在encrypted_pa​​ssword? 你有这个t.string :encrypted_password, :null => false, :default => ""你的迁移文件中的代码行。 在您的模型文件(即post.rb)中,您还没有定义密码属性。