Heroku错误:ActionView :: Template :: Error(未定义方法`captcha'for#< Message:0x007fc9df016930>) [英] Heroku Error: ActionView::Template::Error (undefined method `captcha' for #<Message:0x007fc9df016930>)
问题描述
在我的本地环境中一切正常。当我尝试部署到heroku并最初查看我的网站时,它给了我以下错误:我们很抱歉,但出错了。如果您是应用程序所有者,请查看日志以获取更多信息。
当我检查我的heroku日志时,发现此错误消息: ActionView :: Template :: Error(未定义方法`captcha'for -Message: 0x007fc9df016930 - )
HTML表单视图/网页/ index.html.erb
<%= form_for(@message)do | f | %GT;
<%= f.text_field:first_name,:class => message_name_input message_input_default,:placeholder => 名字%>
< br>< br>
<%= f.text_field:last_name,:class => message_name_input message_input_default,:placeholder => 姓氏%>
< br>< br>
<%= f.text_field:email,:required => true,:class => message_email_input message_input_default,:placeholder => *电子邮件%>
< br>< br>
<%= f.text_area:user_message,:required => true,:class => message_user-message_input,:placeholder => *写信息%>< br>< br>
<%= f.text_field:captcha,:required => true,:class => message_input_default,:placeholder => *#{@ a} +#{@ b} =? %GT;<峰; br><峰; br>
< div id =RecaptchaField2>< / div>
<%= f.submitSend,:class => messages_submit_button%>
<%end%>
页面控制器
class PagesController< ApplicationController
def index
@message = Message.new
@a = rand(9)
@b = rand(9 )
session [sum] = @a + @b
end
end
消息模型
class Message< ActiveRecord :: Base
validates:email,:user_message,presence:true
end
< blockquote>
Messages Controller
class MessagesController< ApplicationController
def show
end
def new
@message = Message.new
end
def创建
@message = Message.new(message_params)
if params [:message] [:captcha] .to_i == session [sum]&& @ message.save
UserMailer.welcome_email(@message).deliver_now
redirect_to'/ message_sent'
else
redirect_to'/'
end
end
private
def message_params
返回params.require(:message).permit(:first_name,:last_name,:email,:user_message,:captcha)
end
end
消息迁移
class CreateMessages< ActiveRecord :: Migration
def change
create_table:messages do | t |
t.string:first_name
t.string:last_name
t.string:电子邮件
t.string:user_message
t.string:验证码
t .timestamps null:false
end
end
end
架构
ActiveRecord :: Schema.define(version:20150712164426) do
#这些是为了支持这个数据库必须启用的扩展名
enable_extensionplpgsql
create_tableadmins,force::cascade do | T |
t.stringemail,默认值:,null:false
t.stringencrypted_password,默认值:,null:false
t.stringreset_password_token
t.datetimereset_password_sent_at
t.datetimeremember_created_at
t.integersign_in_count,默认值:0,null:false
t.datetimecurrent_sign_in_at
t.datetimelast_sign_in_at
t.inetcurrent_sign_in_ip
t.inetlast_sign_in_ip
t.datetimecreated_at
t.datetimeupdated_at
结束
$ b $ add_indexadmins,[email],名称:index_admins_on_email,unique:true,使用:: btree
add_indexadmins,[reset_password_token],名称:index_admins_on_reset_password_token,unique:true,使用::btree
create_tablemessages,force::cascade do | t |
t.stringfirst_name
t.stringlast_name
t.stringemail
t.stringuser_message
t.stringcaptcha
t.datetimecreated_at,null:false
t.datetimeupdated_at,null:false
结束
$ b $结束
$ c
$ b
路线
Rails.application.routes.draw执行
devise_for:admins
资源:页面
资源:消息
资源:管理员
get'/'=> 'pages#index'
get'/ new'=> 'messages#new'
post'/ message_sent'=> 'messages#create'
get'/ message_sent'=> 'messages#show'
end
网站
http://ChrisPelnar.com
解决方案也许你在最初运行 heroku run rake后添加了 captcha db:migrate
第一次包含该迁移?如果是这种情况,您需要重置数据库(请注意,这将清除所有数据)
heroku pg:reset DATABASE
然后再次使用
$进行迁移b
$ b heroku run rake db:migrate
在这些之后, captcha 也应该在Heroku上可用。
Everything is working correctly in my local environment. When I try to deploy to heroku and view my site initially it gives me the following error: "We're sorry, but something went wrong. If you are the application owner check the logs for more information."
When I check my "heroku logs", I find this error message: ActionView::Template::Error (undefined method `captcha' for -Message:0x007fc9df016930-)
HTML form views/pages/index.html.erb
<%= form_for(@message) do |f| %>
<%= f.text_field :first_name, :class => "message_name_input message_input_default", :placeholder => " First Name" %>
<br><br>
<%= f.text_field :last_name, :class => "message_name_input message_input_default", :placeholder => " Last Name" %>
<br><br>
<%= f.text_field :email, :required => true, :class => "message_email_input message_input_default", :placeholder => " * Email" %>
<br><br>
<%= f.text_area :user_message, :required => true, :class => "message_user-message_input", :placeholder => " * Write a message" %><br><br>
<%= f.text_field :captcha, :required => true, :class => "message_input_default", :placeholder => " * #{@a} + #{@b} = ?" %><br><br>
<div id="RecaptchaField2"></div>
<%= f.submit "Send", :class => "messages_submit_button" %>
<% end %>
Pages Controller
class PagesController < ApplicationController
def index
@message = Message.new
@a = rand(9)
@b = rand(9)
session["sum"] = @a + @b
end
end
Message Model
class Message < ActiveRecord::Base
validates :email, :user_message, presence: true
end
Messages Controller
class MessagesController < ApplicationController
def show
end
def new
@message = Message.new
end
def create
@message = Message.new(message_params)
if params[:message][:captcha].to_i == session["sum"] && @message.save
UserMailer.welcome_email(@message).deliver_now
redirect_to '/message_sent'
else
redirect_to '/'
end
end
private
def message_params
return params.require(:message).permit(:first_name, :last_name, :email, :user_message, :captcha)
end
end
Messages Migration
class CreateMessages < ActiveRecord::Migration
def change
create_table :messages do |t|
t.string :first_name
t.string :last_name
t.string :email
t.string :user_message
t.string :captcha
t.timestamps null: false
end
end
end
Schema
ActiveRecord::Schema.define(version: 20150712164426) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "admins", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.inet "current_sign_in_ip"
t.inet "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "admins", ["email"], name: "index_admins_on_email", unique: true, using: :btree
add_index "admins", ["reset_password_token"], name: "index_admins_on_reset_password_token", unique: true, using: :btree
create_table "messages", force: :cascade do |t|
t.string "first_name"
t.string "last_name"
t.string "email"
t.string "user_message"
t.string "captcha"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
Routes
Rails.application.routes.draw do
devise_for :admins
resources :pages
resources :messages
resources :admins
get '/' => 'pages#index'
get '/new' => 'messages#new'
post '/message_sent' => 'messages#create'
get '/message_sent' => 'messages#show'
end
WebSite
http://ChrisPelnar.com
解决方案 Maybe you added the captcha column after originally running heroku run rake db:migrate
the first time with that migration included? If that is the case, you need to reset the database (Please note that this will clear all the data) with
heroku pg:reset DATABASE
and then migrate it again with
heroku run rake db:migrate
After these the captcha should be available on Heroku too.
这篇关于Heroku错误:ActionView :: Template :: Error(未定义方法`captcha'for#< Message:0x007fc9df016930>)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!