如何在Rails

时间:2015-08-28 05:33:46

标签: ruby-on-rails user-interface views

我有两个模型剧集播放列表,包含以下两个视图:

剧集

<div class="name">
    <%= link_to episode.name, episode_path(episode) %>
</div>

<div class="description">
    <%= link_to episode.description episode_path(episode) %>
</div>

对于播放列表

<div class="name">
    <%= link_to playlist.name, playlist_path(playlist) %>
</div>

<div class="description">
    <span>Some special span</span>
    <%= raw(playlist.description) %>
</div>

这两种观点之间的共同点是

<div class="name">. <div class="description"> 

但是这两个divss的内容对于每个视图都是不同的。

问题:我如何将这两个常见的div提取到另一个视图中,称为_section?

我尝试了什么:

  1. 细胞 - &gt;他们给了我一个带有属性的漂亮视图模型,但我找不到在属性放置的地方之间添加额外HTML元素的方法。

  2. 产量和Content_for-&gt;我试图用:

  3. 创建一个单独的_section布局

    _section.html.erb

    <div class="name">
        <%= yield :name %>
    </div>
    
    <div class="description">
        <%= yield :description %>
    </div>
    

    然后是两个视图。 剧集视图将呈现以下内容

    <% render layout: "section" do %>
     <% content_for :name do %>
         <%= link_to episode.name, episode_path(episode) %>
     <% end %>
     <% content_for :description do %>
         <%= link_to episode.description episode_path(episode) %>
     <% end %>
    <% end %>
    

    这种工作直到你进行缓存(他们说content_for不能用于缓存,我需要缓存它)而我遇到的另一个问题是你应该包含一个额外的空命名产量。

1 个答案:

答案 0 :(得分:0)

我最终将播放列表和剧集视图的所有逻辑移动到一个视图中 - 称为基本上执行以下操作的部分:

<div class="name">
    <%= link_to object.name, polymorphic_path(object) %>
</div>

<div class="description">
    <% if is_episode? %>
        <h1>Some special h1 for episode</h1>
    <% elsif is_playlist? %>
        <h2>Some special other html for playlist for episode</h2>
    <% end %>
    <%= raw(playlist.description) %>
</div>

哇那些“ifs”很难看。我不确定我是否正确理解了这个问题,但令人惊讶的是我找不到更清洁的解决方案。