Ruby on Rails外部化视图

时间:2016-01-07 16:46:32

标签: ruby-on-rails

我主要是LAMP开发人员,正在慢慢转向ruby开发。在PHP中,我可以使用单独的PHP文件为每个部分将页面拆分成段(以最大化代码重用)。一个例子就是wordpress,你有一个单独的标题/侧边栏/内容文件等。

这是否可以使用Ruby on Rails?它是否相当于将控制器/视图嵌入到另一个视图中?到目前为止,我对嵌入任何内容的方式感到有点难过,因为看起来有一个控制器有一个视图的路径,所以我不确定你会尝试包括哪个位。

2 个答案:

答案 0 :(得分:1)

您要找的是partials。您可以创建部分内容,例如侧边栏或页脚,然后将其渲染为模板。

官方Rails指南包含有关using partials的一些信息。

基本上,您创建一个以下划线为前缀的文件名,例如posts/_form.html.erb,然后将其渲染到视图中

<%= render partial: "form" %>

您还可以从views文件夹

指定绝对路径
<%= render partial: "/posts/form" %>

模板的相同命名约定(例如格式后缀)适用。

答案 1 :(得分:0)

以下是我使用partials实现侧边栏的方法。希望这将回答你问题的大部分内容。

首先,编辑 application_controller.rb 以将变量传递到布局视图。使用 before_action

class ApplicationController < ActionController::Base

  protect_from_forgery with: :exception
  before_action :set_page

  def set_page
    @categories = Category.all
  end

end

接下来,编辑布局视图( application.html.erb

<body>
  <div class="container">     
    <div class="col-md-10">
      <%= yield %>
    </div>

    <div class="col-md-2">
      <%= render partial: 'categories/sidebar' %>
    </div>                 
  </div>
</body>

然后创建部分。您可以从部分目录访问控制器变量 的 /views/categories/_sidebar.html.erb

<h3>Categories</h3>
<div class="row">
  <br> 
  <% @categories.each do |category| %>
       <h5 class="media-heading">
         <%= link_to category.name, category %>
       </h5>
  <% end %>
</div>

有关页面屏幕截图和更多详细信息,请结帐my post