0

我是 Rails 新手,仍在研究基础知识,因此非常感谢任何提示和建议!

我在网站上制作了一个功能联系页面,我希望能够在不同页面上呈现选项卡内的表单和功能。我的视图文件夹中的 static_pages 文件夹中有以下代码:

<div id="tabs">
 <ul>
    <li><a href="#tabs-1">About</a></li>
    <li><a href="#tabs-5">Contact</a></li>
 </ul>
  <div id="tabs-1">
   <%= render "shared/about"%>
</div>
 <div id="tabs-5">
   <%= render "contact/new"%>
 </div>

其中 <%= render "contact/new"%> 对应于视图中联系人中的 new.html.erb 文件。

我的 routes.rb 中的相关代码是

match 'contact' => 'contact#new', :as => 'contact', :via => :get
match 'contact' => 'contact#create', :as => 'contact', :via => :post

这是我的控制器:

 class ContactController < ApplicationController

  def new
    @message = Message.new
  end

  def create
    @message = Message.new(params[:message])

    if @message.valid?
      NotificationsMailer.contact_pr(@message).deliver
      redirect_to(root_path, :notice => "Message was successfully sent.")
    else
      flash.now.alert = "Please fill all fields."
     render :new
    end
  end
end

但是,似乎无论我尝试什么,我仍然无法呈现表单。如果这是一个非常简单的问题,我深表歉意,我最感兴趣的是在 Ruby on Rails 的基础上变得更好,所以任何建议都值得赞赏!谢谢!

4

1 回答 1

1

如果您想在其他模板中呈现此表单(并且您确实这样做了),您应该将其提取到部分命名,例如:_form.html.erb.

然后,你应该把

<%= render 'contact/form' %>

任何你需要这个局部视图的地方(包括new.html.erb模板)。完成此操作后,您应该离开

render :new

在控制器中,因为它的工作方式与视图中的有点不同,它呈现适当的动作模板而不是部分。当然,您需要@message在需要此部分的任何地方设置变量。或者,您可以输入部分内容:

<%= form_for(@message || Message.new) do |f| %>

有关布局和渲染的更多信息在这里

于 2013-07-17T08:16:41.597 回答