Heroku错误:ActionView :: Template :: Error(未定义的方法`validation码’用于#)
一切都在我当地的环境中正常运作。 当我尝试部署到heroku并最初查看我的网站时,它给了我以下错误:“我们很抱歉,但出了点问题。如果您是应用程序所有者,请查看日志以获取更多信息。”
当我检查我的“heroku日志”时,我发现此错误消息: ActionView :: Template :: Error(未定义的方法`captcha’用于-Message:0x007fc9df016930-)
HTML表单视图/ pages / index.html.erb
"message_name_input message_input_default", :placeholder => " First Name" %>
"message_name_input message_input_default", :placeholder => " Last Name" %>
true, :class => "message_email_input message_input_default", :placeholder => " * Email" %>
true, :class => "message_user-message_input", :placeholder => " * Write a message" %>
true, :class => "message_input_default", :placeholder => " * #{@a} + #{@b} = ?" %>
"messages_submit_button" %>
页面控制器
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
消息控制器
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
邮件迁移
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
架构
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
路线
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
网站
http://ChrisPelnar.com
也许你在最初运行heroku run rake db:migrate
之后添加了captcha列heroku run rake db:migrate
第一次迁移包含该迁移? 如果是这种情况,您需要重置数据库( 请注意这将清除所有数据 )
heroku pg:reset DATABASE
然后再次迁移它
heroku run rake db:migrate
在这些之后,validation码也应该在Heroku上可用。