2016-09-27 12 views
0

Прошло некоторое время с тех пор, как я запрограммировал Rails ... обновляю все синтаксис и изменения Rails 5.0.Настройка простой формы Rails 5 Mailform

Использование Rails 5.0.0.1

Использование Ruby, рубин 2.3.1p112 (2016-04-26 ревизия 54768) [x86_64-darwin16]

Я пытаюсь настроить простой контактный мы формируем на целевой странице. Я отправляюсь на маршрут отправки электронной почты непосредственно из формы и сохраняя ее в базе данных.

Я использую mail_form камень и после этого thread

Я знаю, что я делаю некоторые новобранец ошибки на моих контроллерах, но после того, как после нескольких Stack Q/A-х я еще не совсем там.

Модель успешно отправляет электронную почту в Rails Console. Я просто не могу заставить контроллер работать. Это сайт на одной странице, поэтому я добавляю частичные страницы на страницу индекса в папке «Просмотр страниц».

Ошибка я получаю

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 (Действие «create» не найдено для PagesController): – DaveG

+1

вы изучаете рельсы, продолжайте движение. я бы действительно рекомендовал прочитать http://guides.rubyonrails.org/routing.html - в вашем терминальном запуске 'rake routes', и вы увидите, что было создано 7 маршрутов, и ваша форма указывает на' create', а не на 'index' ... изменить имя вашего метода в контроллере от' index' до 'create', и оно будет работать. –

+0

Да снова учиться. ... Спасибо Блэр ... Я буду продолжать пытаться. – DaveG

0

redirect_to :back устарел в рельсах 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