【问题标题】:Collecting emails on a static page in rails在 Rails 的静态页面上收集电子邮件
【发布时间】:2011-11-30 18:54:16
【问题描述】:

我的 Rails 3.1 网站上有一个静态页面。我有一个只有电子邮件属性(电子邮件:字符串)的访客模型。我想收集来自我网站访问者的电子邮件。他们将在文本字段中输入他们的电子邮件,然后单击提交,然后被重定向到感谢页面。

我可以用资源做这种事情,但我不需要那么多。只需提交并表示感谢。

我该怎么做?请提供视图和控制器的代码。

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 forms routing


    【解决方案1】:

    使用资源有什么问题?您的访问者是一种资源,那么为什么不将其视为一种资源呢?

    在您的路线中:

    resource :visitors, :only => :create # POST to visitor_path to create a visitor
    root_to ...
    

    在访客控制器中

    def create
      @visitor = Visitor.new(params[:visitor])
      if @visitor.save
        render "pages/comingsoon" # or redirect, or render leave empty to render views/visitors/create.html.erb
      else
        # ...
      end
    end
    

    现在你可以拥有一个包含内容的文件views/pages/comingsoon.html.erb

    <h1>Thank you</h1>
    <p>Stored your email address <%= @visitor.email %></p>
    

    为了完整起见,新访客的表格:

    <%= form_for Visitor.new do |f| => ...
    

    【讨论】:

    • 谢谢!我试过了,但不明白 form_for 或 form_tag 是如何工作的。在我收集电子邮件的静态页面中,表单会是什么样子?另外,如果VisitorController 中的@visitor.save 我不需要重定向到thankyou.html 吗?
    • 应该做。是的,您也可以将“谢谢”重定向到“谢谢”,但您将无法在谢谢页面中使用@visitor.email 呈现当前用户的电子邮件。
    • 谢谢。因此,现在当我提交表单时,它成功接收电子邮件,但将我重定向到 localhost:3000/visitors 并给我消息“模板丢失”,指的是“创建”。我如何将它发送到thankyou.html.haml?另外,不是“资源:访问者”吗?
    • 你永远只有一个访客,这就是我使用资源的原因。如果你想添加例如稍后进行索引操作,您应该去寻找资源,是的。关于模板问题:要么按照我的回答中所述创建模板views/visitor/create.html.erb,要么重定向到您的感谢页面(例如redirect_to“www.example.com/thankyou”)。
    • 非常感谢您的帮助。我是 Rails 的新手。你的建议很好,唯一的问题是当我添加“resource :visitor, :only => :create”并且我在路由中有“root :to => 'pages#comingsoon'”时我得到“路由错误没有路由匹配{: action=>"create", :controller=>"visitors", :format=>nil}" 即使我确实有一个带有创建操作的访问者控制器。我错过了什么?
    猜你喜欢
    • 1970-01-01
    • 2014-05-31
    • 2018-03-02
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多