设置一个简单的 Rails 5 邮件表单
Setting up a simple Rails 5 Mailform
自从我在 Rails 中编程以来已经有一段时间了...了解所有 Rails 5.0 语法和更改的最新信息。
使用 Rails 5.0.0.1
使用 Ruby ruby 2.3.1p112(2016-04-26 修订版 54768)[x86_64-darwin16]
我正在尝试在登录页面上设置一个简单的联系我们表单。我打算直接从表单发送电子邮件,而不是将其存储到数据库中。
我正在使用 mail_form gem and following this thread
我知道我在我的控制器上犯了一些新手错误,但在遵循了几个 Stack Q/A 之后,我仍然不完全在那里。
模型在 Rails 控制台中成功发送电子邮件。我只是无法让控制器工作。这是一个单页网站,因此我将部分内容添加到页面视图文件夹中的索引页面。
我收到错误
AbstractController::ActionNotFound (The action 'create' could not be found for PagesController):
路线
Rails.application.routes.draw do
get 'users/new'
resources :pages
root 'pages#index'
end
表格部分
app/views/pages/_form.html.erb
<%= form_tag(pages_path) do %>
<div class="row">
<div class="column width-6">
<%= text_field_tag 'firstname', nil, class: 'form-element rounded large', placeholder: 'First Name*', tabindex: '1' %>
</div>
<div class="column width-6">
<%= text_field_tag 'lastname', nil, class: 'form-element rounded large', placeholder: 'Last Name*', tabindex: '2' %>
</div>
<div class="column width-6">
<%= email_field_tag 'email', nil, class: 'form-element rounded large', placeholder: 'Email Address*', tabindex: '3' %>
</div>
<div class="column width-6">
<%= text_field_tag 'website', nil, class: 'form-element rounded large', placeholder: 'Website', tabindex: '4' %>
</div>
<div class="column width-6">
<%= text_field_tag 'phone', nil, class: 'form-element rounded large', placeholder: 'Phone', tabindex: '5' %>
</div>
</div>
<div class="row">
<div class="column width-12">
<%= text_area_tag 'message', nil, class: 'form-element rounded large', placeholder: 'Message*', tabindex: '6' %>
</div>
<div class="column width-12">
<%= submit_tag 'Send Email', class: 'form-submit button rounded medium bkg-theme bkg-hover-green color-white color-hover-white' %>
</div>
</div>
<% end %>
页面控制器
class PagesController < ApplicationController
def index
@contact = Page.new(params[:page])
if @contact.deliver
redirect_to :back, :notice => "Thank you for contacting us, We'll get back to you shortly!"
else
flash.now[:error] = 'Sorry, it looks like there was an error with your message, Please give us a call or shoot us a text at ....'
end
end
end
感谢您的帮助。这个社区很棒!
页面控制器缺少您的路由。
在config/routes.rb
中添加:
resources :pages
在PagesController.rb
class PagesController < ApplicationController
def create
@contact = Page.new(params[:page])
if @contact.deliver
redirect_to :back, :notice => "Thank you for contacting us, We'll get back to you shortly!"
else
flash.now[:error] = 'Sorry, it looks like there was an error with your message, Please give us a call or shoot us a text at ....'
end
end
end
处理 AJAX post
。
redirect_to :back
在 rails 5 中被弃用。取而代之的是一个名为 redirect_back
.
的新函数
但我不会使用 index
操作来创建新页面,即使您不将其保存到数据库中也是如此。相反,我会定义一个名为 create
的新操作,并最终重定向到 index
。由于您已经在路由中使用了 resources :pages
,因此您无需在此处添加任何内容。在这里您可以找到默认路由及其操作,以及它们的用途:http://edgeguides.rubyonrails.org/routing.html#resource-routing-the-rails-default
此外,如果您使用的是模型,我会考虑使用 form_for
而不是 form_tag
。在这里你可以找到一个简单的例子:http://edgeguides.rubyonrails.org/getting_started.html#the-first-form
希望对您有所帮助:)
自从我在 Rails 中编程以来已经有一段时间了...了解所有 Rails 5.0 语法和更改的最新信息。
使用 Rails 5.0.0.1
使用 Ruby ruby 2.3.1p112(2016-04-26 修订版 54768)[x86_64-darwin16]
我正在尝试在登录页面上设置一个简单的联系我们表单。我打算直接从表单发送电子邮件,而不是将其存储到数据库中。
我正在使用 mail_form gem and following this thread
我知道我在我的控制器上犯了一些新手错误,但在遵循了几个 Stack Q/A 之后,我仍然不完全在那里。
模型在 Rails 控制台中成功发送电子邮件。我只是无法让控制器工作。这是一个单页网站,因此我将部分内容添加到页面视图文件夹中的索引页面。
我收到错误
AbstractController::ActionNotFound (The action 'create' could not be found for PagesController):
路线
Rails.application.routes.draw do
get 'users/new'
resources :pages
root 'pages#index'
end
表格部分
app/views/pages/_form.html.erb
<%= form_tag(pages_path) do %>
<div class="row">
<div class="column width-6">
<%= text_field_tag 'firstname', nil, class: 'form-element rounded large', placeholder: 'First Name*', tabindex: '1' %>
</div>
<div class="column width-6">
<%= text_field_tag 'lastname', nil, class: 'form-element rounded large', placeholder: 'Last Name*', tabindex: '2' %>
</div>
<div class="column width-6">
<%= email_field_tag 'email', nil, class: 'form-element rounded large', placeholder: 'Email Address*', tabindex: '3' %>
</div>
<div class="column width-6">
<%= text_field_tag 'website', nil, class: 'form-element rounded large', placeholder: 'Website', tabindex: '4' %>
</div>
<div class="column width-6">
<%= text_field_tag 'phone', nil, class: 'form-element rounded large', placeholder: 'Phone', tabindex: '5' %>
</div>
</div>
<div class="row">
<div class="column width-12">
<%= text_area_tag 'message', nil, class: 'form-element rounded large', placeholder: 'Message*', tabindex: '6' %>
</div>
<div class="column width-12">
<%= submit_tag 'Send Email', class: 'form-submit button rounded medium bkg-theme bkg-hover-green color-white color-hover-white' %>
</div>
</div>
<% end %>
页面控制器
class PagesController < ApplicationController
def index
@contact = Page.new(params[:page])
if @contact.deliver
redirect_to :back, :notice => "Thank you for contacting us, We'll get back to you shortly!"
else
flash.now[:error] = 'Sorry, it looks like there was an error with your message, Please give us a call or shoot us a text at ....'
end
end
end
感谢您的帮助。这个社区很棒!
页面控制器缺少您的路由。
在config/routes.rb
中添加:
resources :pages
在PagesController.rb
class PagesController < ApplicationController
def create
@contact = Page.new(params[:page])
if @contact.deliver
redirect_to :back, :notice => "Thank you for contacting us, We'll get back to you shortly!"
else
flash.now[:error] = 'Sorry, it looks like there was an error with your message, Please give us a call or shoot us a text at ....'
end
end
end
处理 AJAX post
。
redirect_to :back
在 rails 5 中被弃用。取而代之的是一个名为 redirect_back
.
但我不会使用 index
操作来创建新页面,即使您不将其保存到数据库中也是如此。相反,我会定义一个名为 create
的新操作,并最终重定向到 index
。由于您已经在路由中使用了 resources :pages
,因此您无需在此处添加任何内容。在这里您可以找到默认路由及其操作,以及它们的用途:http://edgeguides.rubyonrails.org/routing.html#resource-routing-the-rails-default
此外,如果您使用的是模型,我会考虑使用 form_for
而不是 form_tag
。在这里你可以找到一个简单的例子:http://edgeguides.rubyonrails.org/getting_started.html#the-first-form
希望对您有所帮助:)