联系表单(简单表单) - 找不到路由/无法自动加载



我正在尝试在我的Ruby on Rails应用程序上安装联系页面。这似乎很简单,但是在安装了邮件 gems 并使用以下命令创建我的控制器之后:

$ rails generate controller contact_form new create

我导航到我的联系人 URL (/contact_form/new),它说

"无法自动加载常量 ContactFormController,预期 /home/ubuntu/workspace/app/controllers/contact_form_controller.rb to 定义它"

路由和控制器如下:

路线.rb

get 'contact_form/new'
get 'contact_form/create'
resources :contact_forms

contact_form_controller.rb

class ContactFormsController < ApplicationController
    def new
      @contact_form = ContactForm.new
    end
    def create
      begin
        @contact_form = ContactForm.new(params[:contact_form])
        @contact_form.request = request
        if @contact_form.deliver
          flash.now[:notice] = 'Thank you for your message!'
        else
          render :new
        end
      rescue ScriptError
        flash[:error] = 'Sorry, this message appears to be spam and was not delivered.'
      end
    end
  end

contact_form.rb

class ContactForm < MailForm::Base
  attribute :name,      :validate => true
  attribute :email,     :validate => /A([w.%+-]+)@([w-]+.)+([w]{2,})z/i
  attribute :message
  attribute :nickname,  :captcha  => true
  # Declare the e-mail headers. It accepts anything the mail method
  # in ActionMailer accepts.
  def headers
    {
      :subject => "My Contact Form",
      :to => "your_email@example.org",
      :from => %("#{name}" <#{email}>)
    }
  end
end

请注意,您的类名为ContactFormsController,Rails正在寻找ContactFormController。您需要特别注意 Rails 中的复数。

  • 控制器是复数。
  • 模型是单一的。
  • 在大多数情况下,路由是复数的。
  • 类的复数必须始终与文件名匹配。

那么为什么Rails要寻找ContactFormController呢?由于路由定义不正确:

get 'contact_form/new'
get 'contact_form/create'

get 'contact_forms/new'是表单创建新资源的正确途径。您不使用 GET 创建资源,因此请摆脱get 'contact_form/create'.

resources :contact_forms

实际上就是你所需要的。

因此,要修复此错误,您应该:

  1. 重命名contact_form_controller.rb -> contact_forms_controller.rb
  2. 更改路由定义。
  3. 改为请求/contact_forms/new

最新更新