Heroku上的Rails 4.0,NoMethodError(未定义的方法`password_digest ='for#

时间:2014-05-30 18:42:50

标签: heroku ruby-on-rails-4 nomethoderror

我看过很多关于这个错误的帖子,但我还是很难过。

修改:https://anthonyroberts.herokuapp.com/signup

Michael Hartl的教程,第7章结尾,你有一个工作注册表。在本地工作,但在Heroku上返回500。我重置了数据库并在Heroku上运行db:migrate,但无济于事。我尝试了Heroku控制台,并成功创建了一个用户

foo = User.create(name: "Anthony", email: "email@email.com", 
        password: "foobar", password_confirmation: "foobar")

这很有效,而且我有一个用户。那么为什么注册表单提交会给我这个错误:

NoMethodError (undefined method `password_digest=' for #<User:0x007f02972b7118>): 
    app/controllers/users_controller.rb:12:in `create' 

这是user.rb:

class User < ActiveRecord::Base
    before_save { email.downcase! }
    validates :name, presence: true, length: { maximum: 50 }
    VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(?:\.[a-z\d\-]+)*\.[a-z]+\z/i
    validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
    has_secure_password
    validates :password, length: { minimum: 6 }
end

这是将password_digest添加到模型的迁移:

class AddPasswordDigestToUsers < ActiveRecord::Migration
  def change
    add_column :users, :password_digest, :string
  end
end

这是users_controller.rb:

class UsersController < ApplicationController

  def show
    @user = User.find(params[:id])
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      flash[:success] = "Welcome to the Sample App!"
      redirect_to @user
    else
      render 'new'
    end
  end

  private

    def user_params
      params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation)
    end
end

这是new.html.erb模板:

<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>
<div class="row">
  <div class="span6 offset3">
    <%= form_for(@user) do |f| %>
      <%= render 'shared/error_messages' %>

      <%= f.label :name %>
      <%= f.text_field :name %>

      <%= f.label :email %>
      <%= f.text_field :email %>

      <%= f.label :password %>
      <%= f.password_field :password %>

      <%= f.label :password_confirmation, "Confirmation" %>
      <%= f.password_field :password_confirmation %>

      <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
    <% end %>
  </div>
</div>

我是RoR的新手,所以我敢打赌这是一个可怜的错误。

提前致谢。

2 个答案:

答案 0 :(得分:11)

我遇到了同样的问题并通过运行命令heroku restart修复了它。

答案 1 :(得分:1)

第一个答案很有效,我知道这应该是一个评论,但我还没有评论的声誉。

迁移后运行speechSynthesizer.isSpeaking

Heroku recommends,&#34;重新加载架构并获取任何架构更改。&#34;非常重要,但这是我第一次遇到一个没有做到的问题,并了解它的存在。谢谢你的回答!