2016-05-16 2 views
-3

Я работаю над формой рельсов и думаю, что я что-то испортил, но не могу сказать, что.Форма рельсов, не вызывающая ошибок

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

Я получаю сообщение об ошибке, которое гласит

First argument in form cannot contain nil or be empty 

Мой main_controller.rb выглядит следующим образом

class MainController < ApplicationController 

    def new 
    @contact = Contact.new 
    end 

    def create 
    @contact = Contact.new(contact_params) 
    @contact.request = request 
    if @contact.deliver 
     redirect_to thank_you_path 
    else 
     flash.now[:error] = 'Cannot send message.' 
     render :index 
    end 
    end 

    private 

    def contact_params 
    params.require(:contact).permit(:name, :email, :phone, :message) 
    end 

end 

contact.rb является

class Contact < MailForm::Base 
    attribute :name,  :validate => true 
    attribute :email,  :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i 
    attribute :phone,  :validate => true 
    attribute :message, :validate => true 

    def headers 
    { 
     subject: "Quote Form", 
     to: "[email protected]", 
     from: %("#{name}" <#{email}>) 
    } 
    end 

end 

index.ht ml.erb

<%= bootstrap_form_for(@contact, layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-10") do |f| %> 
form template here 
<% end %> 

маршруты/Р.Б.

Rails.application.routes.draw do 
    resources :main, only: [:new, :create] 
    root 'main#index' 
    get '/thank-you'   => 'main#thank-you' 
end 
+0

У вас нет '@ contact', определенного в указательном действии контроллера. –

+0

вам нужно инициировать «@contact» в вашем действии индекса, потому что на index.html.erb «@contact» равен нулю ИЛИ замените «@contact» на Contact.new в вашей форме. –

+0

@ j-dexx. Как мне это сделать? ? Я попытался добавить его в главный контроллер как индекс def –

ответ

0

Вы создаете экземпляр контактов в новом методе и вызова этого экземпляра с form_for на index.html.erb, поэтому вы получите @contactnil, просто переместите этот код @contact = Contact.new, чтобы проиндексировать метод/действие, в котором вы на самом деле называете форму для экземпляра контакта.