NoMethodError(#<User> 的未定义方法 `password_digest='

5 ruby-on-rails heroku

在控制器中:

\n\n
def createUserForHotel\n  @user=User.new(params_createUserForHotel)\n  if @user.save\n    flash[:notice]="New user is created for the hotel"\n    redirect_to(:controller=>\'hotels\',:action=>"createnewhotel")\n  else\n    flash[:notice]="New user not created "\n    redirect_to(:controller=>\'hotels\',:action=>"createnewhotel")\n  end\nend\n\ndef params_createUserForHotel\n  params.require(:user).permit(:username,:password,:email,:hotel_id)\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

在迁移中:

\n\n
def up\n  create_table :users do |t|\n    t.string "first_name",:limit=>25\n    t.string "last_name",:limit=>50\n    t.string "email",:null=>false,:limit=>100\n    t.string "username",:limit=>50  \n    t.string "password",:limit=>40 \n    t.integer "hotel_id"\n    t.timestamps\n  end\n\n  add_index("users","hotel_id")\nend\n\nclass AlterUsers < ActiveRecord::Migration\n  def up          \n    rename_column("users","password","hashed_password")   \n  end\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 Heroku 日志中:

\n\n
\xe2\x86\x90[0m Started POST "/hotels/createUserForHotel" for 122.50.216.93 at 2014-11-16 10:18:16 +0000\n\xe2\x86\x90[36m2014-11-16T10:18:16.170638+00:00 app[web.1]:\xe2\x86\x90[0m\n\xe2\x86\x90[36m2014-11-16T10:18:16.170641+00:00 app[web.1]:\xe2\x86\x90[0m NoMethodError (undefined method password_digest=\' for #<User:0x007f036c8ffe50>):\n\xe2\x86\x90[36m2014-11-16T10:18:16.170643+00:00 app[web.1]:\xe2\x86\x90[0m   app/controllers/hotels_controller.rb:140:in createUserForHotel\'\n\xe2\x86\x90[36m2014-11-16T10:18:16.170644+00:00 app[web.1]:\xe2\x86\x90[0m\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的应用程序在开发环境中运行良好,但我在 Heroku 日志中收到上述错误。我已在 Heroku 中部署了我的应用程序。

\n

Anc*_*nia 5

您的password专栏应该命名为password_digest- 不是hashed_passwordpassword


Sim*_*tti 0

迁移不会在部署时自动执行。确保rake db:migrate在 Heroku 上运行。

 heroku run rake db:migrate
Run Code Online (Sandbox Code Playgroud)

请参阅Heroku 上的 Rails 4 指南