2016-05-16 5 views
-3

私はレールのフォームに取り組んでいて、何かを台無しにしてしまったと思っています。エラーの原因とならないレールのフォーム

概要を説明します。私は一番下の連絡先フォームを持つ1ページのサイトを作成しました。私は似たような質問をしていますが、別のコントローラと別のページにコンタクトフォームがあるようですので、私の答えを見つけることはできません。私は何かを見逃していることを知っていますが、何が分からないのですか。

は私が述べてエラーを取得する

First argument in form cannot contain nil or be empty 

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 

で次のように私のmain_controller.rbですindex.html.erb

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

ルート/ RB

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

コントローラのインデックスアクションで '@contact'が定義されていません。 –

+0

index.html.erb '@contact'はnilであるため、またはあなたのフォームでContact.newを '@contact'に置き換えてください。 –

+0

@ j-dexxどうすればよいですか?私はそれをメインコントローラにdefインデックスとして追加しようとしました –

答えて

0

あなたはなぜだと新しい方法で連絡先のインスタンスを作成し、index.html.erb上のform_forとそのインスタンスを呼び出しています@contactnilを取得するには、このコード@contact = Contact.newを実際にwith番目のContactインスタンスのフォームを呼び出すインデックスメソッド/アクションに移動してください。

関連する問題