关于在轨道上使用红宝石渲染

时间:2013-07-17 07:58:00

标签: html ruby-on-rails render partial

我是rails的新手,仍然致力于基础知识,因此非常感谢任何提示和建议!

我已经在网站上创建了一个功能性联系页面,我希望能够在不同页面上的选项卡内呈现形式和功能。我在views文件夹的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>

其中&lt;%= render&#34; contact / new&#34;%&gt;对应于视图中联系的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中更好地学习基础知识,所以任何建议都值得赞赏!谢谢!

1 个答案:

答案 0 :(得分:1)

如果要在其他模板中渲染此表单(并且确实如此),则应将其提取为部分命名,例如:_form.html.erb

然后,你应该把

<%= render 'contact/form' %>

在任何地方你都需要这部分视图(包括new.html.erb模板)。 完成后,您应该离开

render :new

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

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

有关布局和渲染here的更多信息。