Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 单页控制器中的Rails ContactUs模型_Ruby On Rails_Ruby On Rails 3_Actionmailer - Fatal编程技术网

Ruby on rails 单页控制器中的Rails ContactUs模型

Ruby on rails 单页控制器中的Rails ContactUs模型,ruby-on-rails,ruby-on-rails-3,actionmailer,Ruby On Rails,Ruby On Rails 3,Actionmailer,Hi有一个没有模型的简单rails站点,它只用于服务静态页面 该站点有一个页面控制器,但它只提供一个由部分组成的主页 类似于app/views/pages/home.html.erb <%= render 'layouts/about' %> <%= render 'layouts/services' %> <%= render 'layouts/rooms' %> <%= render 'layouts/breakfast' %> <%=

Hi有一个没有模型的简单rails站点,它只用于服务静态页面

该站点有一个页面控制器,但它只提供一个由部分组成的主页

类似于
app/views/pages/home.html.erb

<%= render 'layouts/about' %>
<%= render 'layouts/services' %>
<%= render 'layouts/rooms' %>
<%= render 'layouts/breakfast' %>
<%= render 'layouts/guestbook' %>
<%= render 'layouts/contact' %>

主页使用一些html5/javascript自动滚动页面。因此,每个部分都以#开头,以允许自动滚动到该部分

  • 看一看
  • 这一切都很好。

    现在我的问题是:我想添加一个rails类型的ContactUS页面

    以下是各种教程:

    它们都指向拥有一个消息模型、ActionMailer和contact controller,如果您想拥有一个单独的contact controller,那么它就可以工作

    我一直在想如何构建一个contactUs表单,但将其保留在pages控制器中,以允许自动滚动,因为使用contact控制器似乎会改变所有URL路由。我知道这可能不是Rails的方式,但任何帮助都会很好

    希望这是有道理的。有什么想法吗?

    我会做以下几点:

    添加一个名为“表单”的新模型,app/models/Form.rb

    class Form
      include ActiveModel::Validations
      include ActiveModel::Conversion
      extend ActiveModel::Naming
    
      attr_accessor :name, :email, :message
    
      validates :name, presence: true
      validates :email, presence: true, email: true
      validates :message, presence: true
    
      def initialize(attributes = {})
        attributes.each do |name, value|
          send("#{name}=", value)
        end
      end
    
      def persisted?
        false
      end
    
    end
    
    在控制器上修改您的页面:

    def new
      @form = Form.new
    end
    
    def create
      @form = Form.new(params[:form])
      if @form.valid?
        redirect_to root_path, notice: "Thanks!")
      else
        render "new"
      end
    end
    
    将表单html代码添加到应用程序/views/pages/home.html.erb

    <%= form_for @form do |f| %>
      <div class="field">
        <%= f.label :name %>
        <%= f.text_field :name %>
     </div>
    
     <div class="field">
       <%= f.label :email %>
       <%= f.email_field :email %>
     </div>
    
     <div class="field">
       <%= f.label :message %>
       <%= f.text_area :message %>
     </div>
    
     <div class="actions">
       <%= f.submit "Submit" %>
     </div>
    
    
    
    就这样,你有了你的联系方式

    这段代码是从我在github上的一个gem中收集的:

    为了进行测试,您可以将此gem添加到gemfile中,并运行github自述文件中描述的文件生成器。

    我将执行以下操作:

    添加一个名为“表单”的新模型,app/models/Form.rb

    class Form
      include ActiveModel::Validations
      include ActiveModel::Conversion
      extend ActiveModel::Naming
    
      attr_accessor :name, :email, :message
    
      validates :name, presence: true
      validates :email, presence: true, email: true
      validates :message, presence: true
    
      def initialize(attributes = {})
        attributes.each do |name, value|
          send("#{name}=", value)
        end
      end
    
      def persisted?
        false
      end
    
    end
    
    在控制器上修改您的页面:

    def new
      @form = Form.new
    end
    
    def create
      @form = Form.new(params[:form])
      if @form.valid?
        redirect_to root_path, notice: "Thanks!")
      else
        render "new"
      end
    end
    
    将表单html代码添加到应用程序/views/pages/home.html.erb

    <%= form_for @form do |f| %>
      <div class="field">
        <%= f.label :name %>
        <%= f.text_field :name %>
     </div>
    
     <div class="field">
       <%= f.label :email %>
       <%= f.email_field :email %>
     </div>
    
     <div class="field">
       <%= f.label :message %>
       <%= f.text_area :message %>
     </div>
    
     <div class="actions">
       <%= f.submit "Submit" %>
     </div>
    
    
    
    就这样,你有了你的联系方式

    这段代码是从我在github上的一个gem中收集的:


    对于测试,您可以将此gem添加到gemfile并运行github自述文件中所述的文件生成器。

    如果您的问题是使用单个控制器解决的,为什么不将联系人方法放在该控制器中?您可以从pages controller中联系人页面的联系人视图中选择
    。这需要创建联系人控制器和视图。如果您的问题是使用单个控制器解决的,为什么不将联系人方法放在该控制器中?您可以从页面控制器中联系人页面的联系人视图中选择
    。这将需要创建一个联系人控制器和视图。感谢我最后去了那里,我现在唯一的问题是该站点有一个带有javascript和html5的奇特模板,老实说,我不确定它是如何工作的,但是主页是在可滚动的部分,在完成表单后,我想留在联系人部分,而不是根部分。i、 是的,而不是。你知道我如何通过重定向而不是主路径传递url吗?也许这些答案可以帮助你所以像这样重定向:redirect_to:action=>'page',:anchor=>'contact'谢谢我最后去了那里,我现在唯一的问题是这个网站有一个带有javascript和html5的奇特模板,老实说,我不确定它是如何工作的,但是主页是在可滚动的部分,在完成表单后,我想留在联系人部分,而不是根部分。i、 是的,而不是。你知道我如何通过重定向而不是主路径传递url吗?也许这些答案可以帮助你所以像这样重定向:重定向到:action=>'page',:anchor=>'contact'