ruby-on-rails - 如何在Rails中对公共(public) View 代码进行分组和干燥

标签 ruby-on-rails user-interface views

我有两个模型 EpisodePlaylist 具有以下两个 View :

对于剧集:

<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>

这两个 View 之间的共同点是

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

但是这两个divs的内容对于每个view都是不同的。

问题:如何将这两个公共(public) div 提取到另一个名为 _section 的 View 中?

我尝试了什么:

  1. 单元格 -> 它们为我提供了一个带有属性的漂亮 View 模型,但我找不到在放置属性的位置之间添加额外 HTML 元素的方法。

  2. Yield 和 Content_for-> 我尝试创建一个单独的 _section 布局:

_section.html.erb

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

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

然后是两个 View 。 Episode View 将呈现以下内容

<% 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 不适用于缓存,我需要缓存它)我遇到的另一个问题是你应该包含一个额外的空未命名的 yield。

最佳答案

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

<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>

哇,那些“如果”真丑。我不确定我是否正确理解了问题,但令人惊讶的是我找不到更清晰的解决方案。

关于ruby-on-rails - 如何在Rails中对公共(public) View 代码进行分组和干燥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32263966/

相关文章:

javascript - 从 javascript 调用 ruby

java - 如何创建可扩展列表?

Java Swing GUI 更新/更改方法 - 卡住在循环中

entity-framework - Entity Framework 看不到 View 的计算列

ruby-on-rails - 如何在 Ruby 中使用动态分派(dispatch)调用方法(当方法是模块的一部分时)?

ruby-on-rails - emberjs 和 Foundation4

javascript - Rails - 为输入字段设置自定义验证消息(前端)

ruby-on-rails - 回形针无法保存附件

php - lithium PHP 框架如何在 PHP 页面中生成 $this 上下文?

android - 以编程方式将 View 添加到具有权重的 LinearLayout