Heroku错误:ActionView :: Template :: Error(未定义方法`captcha'for#< Message:0x007fc9df016930>) [英] Heroku Error: ActionView::Template::Error (undefined method `captcha' for #<Message:0x007fc9df016930>)

查看:173
本文介绍了Heroku错误:ActionView :: Template :: Error(未定义方法`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_pa​​ssword,默认值:,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 $结束

$ 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#&lt; Message:0x007fc9df016930&gt;)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆