Rails 3.2
我使用 Mail_form gem (来自plataformatec)为我的网站创建一个简单的“联系我们”表单。点击“发送”后,我收到一条路由错误:
Routing Error
No route matches [POST] "/contactus"
Try running rake routes for more information on available routes.
我有一个非常简单的设置,但我是Rails的新手,我仍然掌握它。我只希望表单发送电子邮件到某个电子邮件地址......没有别的。我理解问题出在routes.rb但是我已经摆弄了这么长时间以来我无法弄清楚出了什么问题。我从来没有如此努力地处理Rails错误。请帮助!
'页数'型号:app / models / pages.rb
class Page < MailForm::Base
attribute :name, :validate => true
attribute :email, :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
attribute :page_title, :validate => true
attribute :page_body, :validate => true
def headers
:subject => "#{page_title}",
:to => "careers@example.com",
:from => %("#{name}" <#{email}>)
end
end
'页面'控制器:app / controllers / pages_controller.rb
class PagesController < ApplicationController
respond_to :html
def index
end
def create
page = Page.new(params[:contact_form])
if page.deliver
redirect_to contactus_path, :notice => 'Email has been sent.'
else
redirect_to contactus_path, :notice => 'Email could not be sent.'
end
end
end
表单部分:app / views / pages / _form.html.erb
<%= simple_form_for :contact_form, url: contactus_path, method: :post do |f| %>
<div>
<%= f.input :name %>
<%= f.input :email, label: 'Email address' %>
<%= f.input :page_title, label: 'Title' %>
<%= f.input :page_body, label: 'Your message', as: :text %>
</div>
<div class="form-actions">
<%= f.button :submit, label: 'Send', as: :text %>
</div>
查看(称为联系人):app / views / pages / contactus.html.erb
<body>
<div>
<h2 class="centeralign text-info">Contact Us</h2>
</div>
<div class="container centeralign">
<%= render 'form' %>
</div>
<h2>We'd love to hear from you! </h2><br /><h4 class="muted">Send us a message and we'll get back to you as soon as possible</h4>
</div>
</div>
</body>
的routes.rb
Example::Application.routes.draw do
resources :pages
root to: 'pages#index', as: :home
get 'contactus', to: 'pages#contactus', as: :contactus
get 'services', to: 'pages#services', as: :services
答案 0 :(得分:3)
您的routes.rb文件没有POST /contactus
的路由
你有GET /contactus
但没有POST
的路线,所以铁路说的是正确的。
只需添加类似
的内容post 'contactus', to: 'controller#action'
使用您需要调用的任何控制器和操作。或者,如果您尝试在页面控制器中调用create
操作,那么您的问题是,您已将resources :pages
添加到路径,您实际上已创建路径
post 'pages'
因此,在这种情况下,我会将您的simple_form_for
网址更改为发布到那里。尝试使用
simple_form_for :contact_form, url: pages_path, method: :post do
代替。如果pages_path
不起作用,那么只需在控制台中运行rake routes
,您就会看到所有路线的列表,包括其名称。然后选择你需要的那个:)