【问题标题】:Rails 4.0 on Heroku, NoMethodError (undefined method `password_digest=' for #<UserHeroku 上的 Rails 4.0,NoMethodError(#<User 的未定义方法 `password_digest='
【发布时间】:2014-05-30 18:42:50
【问题描述】:

我已经看到很多关于这个错误的帖子,但我仍然很难过。

编辑: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 的新手,所以我敢打赌这是一个小错误。

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    我刚刚遇到了同样的问题,并通过运行命令 heroku restart 解决了它。

    【讨论】:

    • 谢谢,这对我有用。你有机会知道为什么吗?我推到heroku,然后运行迁移。我还不止一次地重置了数据库。我应该在所有迁移(或数据库重置)后重新启动 heroku 吗?
    • 我不确定,我认为 User 模型可能已经缓存在 Heroku 中,或者类似的东西
    • 谢谢!对此感到困惑。
    【解决方案2】:

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

    Heroku recommends 在迁移后运行 heroku restart,“重新加载架构并获取任何架构更改。”真的很重要,但这是我第一次遇到不这样做的问题并了解到它的存在。感谢您的回答!

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多