创建联系我们<section> </section>

时间:2014-11-18 06:43:11

标签: ruby-on-rails

我正在尝试在我的网页上创建一个“联系我们”<section>,但我遇到了麻烦,因为我不熟悉rails。我希望任何人输入他们的电子邮件,姓名,电话号码和消息,点击submit后,我们会向他发送一封电子邮件,上面写着他们的姓名,电话号码,电子邮件和消息。我想在没有页面重新加载的情况下这样做。我;我不太确定如何解决这个问题,而且我整天都在阅读帖子和文档,但我仍然无法将各个部分放在一起。

我正在尝试创建表单以将提交的数据传递到我的控制器操作(HomeControllersend_mail操作),但我目前遇到此错误:

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

根据示例1.2(http://guides.rubyonrails.org/form_helpers.html)在我看来,我可以做到这一点

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>

控制器:

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: "myemail@gmail.com"

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

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

1 个答案:

答案 0 :(得分:2)

我将在此处扩展我的评论作为答案。

您获得的错误没有路线匹配{:action =&gt;&#34; send_mail&#34;,:controller =&gt;&#34; home&#34;} 明确指出您的联系表单无法正常工作的根本问题。无论何时您在服务器端执行某些操作(如调用控制器操作),您都需要一条将请求映射到控制器和操作的路由。如果您打开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

当您在那里完成工作后,您的联系表单现在应该提交请求,尽管页面加载。

此外,将此作为路由添加(这是必需的)会为您的视图添加路径助手,而不是使用更简单和可读{action: "send_mail", controller: "home"}帮助器的那个庞大且依赖于名称的哈希contact_path。在开发过程中,您希望查看所有有效路由,帮助程序名称和链接控制器操作,只需转到rails项目的根目录并键入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 %>