NoMethodError(用户没有定义`password_digest=`方法)

5

在控制器中:

def createUserForHotel
  @user=User.new(params_createUserForHotel)
  if @user.save
    flash[:notice]="New user is created for the hotel"
    redirect_to(:controller=>'hotels',:action=>"createnewhotel")
  else
    flash[:notice]="New user not created "
    redirect_to(:controller=>'hotels',:action=>"createnewhotel")
  end
end

def params_createUserForHotel
  params.require(:user).permit(:username,:password,:email,:hotel_id)
end

在迁移中:

def up
  create_table :users do |t|
    t.string "first_name",:limit=>25
    t.string "last_name",:limit=>50
    t.string "email",:null=>false,:limit=>100
    t.string "username",:limit=>50  
    t.string "password",:limit=>40 
    t.integer "hotel_id"
    t.timestamps
  end

  add_index("users","hotel_id")
end

class AlterUsers < ActiveRecord::Migration
  def up          
    rename_column("users","password","hashed_password")   
  end

在Heroku日志中:
[0m Started POST "/hotels/createUserForHotel" for 122.50.216.93 at 2014-11-16 10:18:16 +0000
←[36m2014-11-16T10:18:16.170638+00:00 app[web.1]:←[0m
←[36m2014-11-16T10:18:16.170641+00:00 app[web.1]:←[0m NoMethodError (undefined method password_digest=' for #<User:0x007f036c8ffe50>):
←[36m2014-11-16T10:18:16.170643+00:00 app[web.1]:←[0m   app/controllers/hotels_controller.rb:140:in createUserForHotel'
←[36m2014-11-16T10:18:16.170644+00:00 app[web.1]:←[0m

我的应用在开发环境下运行得非常完美,但是在Heroku日志中出现了上述错误。我已经将我的应用部署到了Heroku。


1
下次请温柔一点,并花些时间学习如何正确缩进和格式化您的代码。 - Simone Carletti
请确保你已经安装了bcrypt宝石,同时在用户模式下你需要输入has_secure_password - Ruby Racer
4个回答

5

你的 password 列应该被命名为 password_digest - 而不是 hashed_passwordpassword


0

作为一种选择,您可以委托(或存根)

class User < ApplicationRecord
  def password_digest=(hashed_psw)
    hashed_password = hashed_psw
  end
end

顺便说一下,如果您创建一个名为password_digest的列会更好。


这个 setter 完全没有任何作用。 - Sergio Tulentsev

0

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

 heroku run rake db:migrate

请查看Heroku上的Rails 4指南


1
我知道,我已经在Heroku上完成了整个迁移过程。我发现bcrypt(3.1.9)存在于Heroku中,而在我的gemfile中有“gem'bcrypt','〜> 3.1.7'”。这会导致错误吗? - user4229576

0

在你的User模型中,你可以使用alias_attribute :password_digest, :password_column_name


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接