2016-09-27 63 views
0

我已经在Rails中进行编程已经有一段时间了......所有Rails 5.0语法和变化都已经过时。设置一个简单的Rails 5邮件表格

使用Rails 5.0.0.1

使用Ruby红宝石2.3.1p112(2016年4月26日修订54768)x86_64的-darwin16]

我试图建立一个简单的联系人我们在着陆页上形成。我将直接从表单发送电子邮件的路线,并将其存储到数据库。

我使用的是mail_form宝石并且在这之后thread

我知道我在我的控制器做一些新秀的错误,但是几个电池堆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 

表部分

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

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

+0

你需要添加'资源:pages'你'routes.rb'文件 –

回答

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秒。

+0

我改变了路线...但随后出现以下错误... AbstractController :: ActionNotFound(无法找到PagesController的'创建'行为): – DaveG

+1

您正在学习rails,继续前进。我真的会推荐阅读http://guides.rubyonrails.org/routing.html - 在你的终端运行'rake routes',你会看到7条路由被创建,你的表单指向'create'而不是'index' ...将控制器中的方法名称从'index'更改为'create',它将起作用。 –

+0

再次学习。 ...感谢布莱尔......我会继续努力。 – DaveG

0

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

我希望这有助于一点:)

+0

谢谢佐拉。这是一个简单的营销页面,所以我试图避免建立一个数据库,从而避免form_for ...似乎矫枉过正。 – DaveG