2014-11-18 1 views
0

내 페이지에 "문의하기"를 작성하려고하는데 레일이 처음이므로 문제가 있습니다. 누구든지 이메일, 이름, 전화 번호 및 메시지를 입력하고 submit을 클릭하면 이름, 전화 번호, 이메일 및 메시지와 함께 이메일이 전송됩니다. 페이지 재로드없이이 작업을 수행하고 싶습니다. 나는 이것에 대해 어떻게해야하는지 잘 모르겠다. 그리고 나는 하루 종일 게시물과 문서를 읽었지 만, 조각들을 모으는 데 여전히 문제가있다.연락처 만들기 <section>

내 컨트롤러 액션 (HomeController, send_mail 행동)에 제출 된 데이터를 전달하는 양식을 만들려고하고 있지만 현재이 오류를 가로 질러 오는 오전 : 예 1.2에 따르면

No route matches {:action=>"send_mail", :controller=>"home"}

(http://guides.rubyonrails.org/form_helpers.html

<%= form_tag({controller: "home", action: "send_mail"}, method: "post") %> 
    <div class="col-md-12"> 
    <div class="col-md-6"> 
     <div class="form-group"> 
     <%= text_field(:name) %> 
     </div> 
     <div class="form-group"> 
     <%= email_field(:email) %> 
     </div> 
     <div class="form-group"> 
     <%= telephone_field(:phone) %> 
     </div> 
    </div> 
    <div> 
    </div class="col-md-6"> 
    </div> 
,691 :) 내가이

HTML을 할 수있는 나에게 듯

컨트롤러 :

class HomeController < ApplicationController 
    def index 
    end 

    def send_mail 
    name = params[:name] 
    email = params[:email] 
    phone = params[:phone] 
    # body = params[:body] 
    #UserMailer.contact_mail(name, email, body).deliver 
    end 
end 

우편 :

class UserMailer < ActionMailer::Base 
    default to: "[email protected]" 

    def contact_mail(name, email, body) 
    @name = name 
    @email = email 
    @body = body 

    mail(from: email, subject: "Contact Request") 
    end 
end 
+0

거기에 오류를 확인하십시오. ** 경로가 일치하지 않습니다 **. 'routes.rb' 파일에서이 컨트롤러와 동작에 매핑되는 경로를 추가 했습니까? –

+0

@BrandonBuck 그렇지 않습니다. 나는 이것이 내가 한 페이지에서 이루어지기를 원했기 때문에 내가 필요하다고 생각하지 않았다. 이 페이지와 유사 http://ironsummitmedia.github.io/startbootstrap-agency/ – Liondancer

+0

클라이언트 (사용자 브라우저)에서 레일 애플리케이션 (또는 HTTP 웹 서버)으로 요청을 보내는 모든 것이 ping 할 경로를 가져야합니다 . 경로를 지정하지 않으면 Rails에서이 오류가 발생합니다. 조언이 마음에 들지 않으면 즉시 너무 많이하고있는 것입니다. 가능한 가장 간단한 방법으로 연락 양식을 작성한 다음 (페이지 게시 및 다시로드) 더 많은 기능을 추가하십시오.당신은 폼의 원격 옵션을 찾고있을 가능성이 가장 큽니다. [여기에서 확인하십시오.] –

답변

2

나는 대답 여기 내 댓글을 확장거야.

오류가 발생했습니다. 경로가 {: action => "send_mail", controller => "home"}과 일치하지 않습니다.은 연락처 양식이 작동하지 않는 근본적인 문제가 무엇인지 명확하게 보여줍니다. 서버 측에서 (컨트롤러 액션을 호출하는 것과 같이) 무언가를 할 때마다 요청을 컨트롤러와 액션에 매핑하는 경로가 필요합니다. 당신이 당신의 routes.rb 파일을 열고이 같은 라인을 추가하는 경우 : 당신이 당신의 일을했습니다

AppName::Application.routes.draw do 
    # ... probably some stuff 

    post "contact" => "home#send_mail" 
    # This line generates http://localhost:3000/contact as a valid endpoint for POST 
    # (create) requests. I chose post because you're creating an email. 
    # Also note the "home#send_mail" string specifying what to do with this route. 
    # This is formatted as "controller#action" and is a more standard means to specify 
    # the controller and action to handle a route. 

    # ... probably some more stuff 
end 

, 연락처 양식은 이제 페이지로드와 있지만, 요청을 제출해야합니다.

또한이 경로를 필수 경로에 추가하면보기에 경로 도우미가 추가되므로 더 간단하고 읽기 쉬운 contact_path 도우미가있는 부피가 크고 이름에 종속적 인 해시 인 {action: "send_mail", controller: "home"} 대신 개발중인 모든 유효한 경로, 도우미 이름 및 연결된 컨트롤러 작업을보고 싶다면 레일 프로젝트의 루트로 가서 rake routes을 입력하면됩니다.

마지막으로, 문의 양식을 제출할 때 페이지를 다시로드하지 않으려면 AJAX (또는 비동기식)를 통해 요청해야합니다. remote 옵션을 따르고 있습니다.

<%= form_tag contact_path, remote: true do %> 
    <!-- Form contents here, as normal, rails' unobtrusive JavaScript will handle 
     nabbing the forms contents and submitting them asynchronously for you. --> 
<% end %> 
관련 문제