设置一个简单的Rails 5 Mailform

时间:2016-09-27 02:18:30

标签: ruby-on-rails controller ruby-on-rails-5 mail-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并遵循此thread

我知道我在我的控制器上犯了一些新手错误,但是经过几次Stack Q / A之后,我仍然不在那里。

该模型在Rails控制台中成功发送电子邮件。我只是无法使控制器工作。这是一个单页网站,所以我将部分内容添加到Pages View文件夹中的Index页面。

错误我正在

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

表单部分

应用程序/视图/页/ _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

感谢您的帮助。这个社区很棒!

2 个答案:

答案 0 :(得分:0)

页面控制器缺少路由。

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

答案 1 :(得分:0)

在rails 5中不推荐使用

EAN code name stock type 0 12345.0 Monin Mojito Mint Syrup 250 ml 100.0 MONIN Syrups 1 7890.0 Bonne Maman Strawberry Preserve 370g 200.0 BONNE MAMAN 2 6543.0 Bonne Maman Raspberry 370g 150.0 BONNE MAMAN 。而是有一个名为redirect_to :back的新函数。

但我不会使用redirect_back操作来创建新的网页,即使您没有将其保存到数据库中也是如此。相反,我会定义一个名为index的新操作,最后重定向到create。由于您已在路线中使用index,因此您无需在其中添加任何内容。在这里,您可以找到默认路由及其操作,以及它们应该用于什么:http://edgeguides.rubyonrails.org/routing.html#resource-routing-the-rails-default

如果您正在使用模型,我会考虑使用resources :pages代替form_for。在这里您可以找到一个简单的示例:http://edgeguides.rubyonrails.org/getting_started.html#the-first-form

我希望这有点帮助:)