我看过很多关于这个错误的帖子,但我还是很难过。
修改: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的新手,所以我敢打赌这是一个可怜的错误。
提前致谢。
答案 0 :(得分:11)
我遇到了同样的问题并通过运行命令heroku restart
修复了它。
答案 1 :(得分:1)
第一个答案很有效,我知道这应该是一个评论,但我还没有评论的声誉。
迁移后运行speechSynthesizer.isSpeaking
的Heroku recommends,&#34;重新加载架构并获取任何架构更改。&#34;非常重要,但这是我第一次遇到一个没有做到的问题,并了解它的存在。谢谢你的回答!