2016-04-28 11 views
0

mail_formを使用して連絡先フォームを1ページのWebページに配置しようとしています。しかし、私は指示書に従うのが難しいと思っています。具体的にはフォームのビューがあると仮定していますが、私のケースではすべてがコントローラーにあります。visitors_controller。 説明書によると、このように見ているコントローラがあるはずです:レール、1ページの連絡フォーム

class ContactsController < ApplicationController 
def new 
    @contact = Contact.new 
    end 

def create 
    @contact = Contact.new(params[:contact]) 
    @contact.request = request 
    if @contact.deliver 
     flash.now[:notice] = 'Thank you for your message. We will contact you soon!' 
    else 
     flash.now[:error] = 'Cannot send message.' 
     render :new 
    end 
    end 

end 

そしてビューは次のようになります。

<%= simple_form_for @contact, html: {class: 'form-horizontal' } do |f| %> 
    <%= f.input :name, :required => true %> 
    <%= f.input :email, :required => true %> 
    <%= f.input :message, :as => :text, :required => true %> 
    <div class= "hidden"> 
     <%= f.input :nickname, :hint => 'Leave this field blank!' %> 
    </div> 
     <%= f.button :submit, 'Send message', :class=> "btn btn-primary" %> 
    <% end %> 

私visitors_controllerとビューで同じことを達成するためにどのように?それは一日の終わりに

class VisitorsController < ApplicationController 
    def index 
    end 
end 

答えて

1

重要である場合 コントローラは現在、次のようになり、それはちょうど、フォーム、何も特別なのです。 POSTのどこにフォームを伝え、それをターゲットで処理するだけです。デフォルトでは、別のコントローラにポストされますが、これは必要ではありませんが、最も簡単です。

他の場所に投稿する場合は、特定のURLに投稿する他のフォームと同じように機能します。

まず、URLを作成する必要があります。

のconfig/routes.rbを:

resources :visitors do 
    post :contact, on: :collection 
end 

これは、アプリケーションへのルートcontact_visitors_pathを追加します。これはあなたのフォームがPOSTするターゲットです。

その後、visitors_controllerにこのルートのサポートを追加します。

def contact 
    @contact = Contact.new(params[:contact]) 
    @contact.request = request 
    if @contact.deliver 
    flash.now[:notice] = 'Thank you for your message. We will contact you soon!' 
    redirect_to visitors_path # Go back to the index page 
    else 
    flash.now[:error] = 'Cannot send message.' 
    render :index # Instead of :new, as we submit from :index 
    end 
end 

次に、(例では「新」のように、フォームが表示されるページ)インデックス・ページ上でこのフォームのサポートを追加します。

def index 
    @contact = Contact.new 
end 

最後に、どこに投稿するかを伝える必要があります。今

= simple_form_for @contact, url: contact_visitors_path, html: {class: 'form-horizontal' } 

、フォームはあなたのvisitors_controllerを指している、とカスタムメソッドによって処理されています。他のすべては同じように動作します。

+0

ありがとうございます!出来た –

関連する問題