是否有可能截断(或限制显示的单词数量)在Ruby on Rails上的渲染帖子?

时间:2017-05-25 06:24:36

标签: ruby-on-rails

我在构建博客时遇到了问题。

基本上我有使用_post部分显示的帖子。我使用这两种不同的方式:作为Feed的一部分(显示所有帖子)以及点击特定帖子的时间。

当帖子是整体提要的一部分时,我想限制显示的字符数量以保持整洁。这就是帖子在Feed中的显示方式:

<% @posts_by_month.each do |monthname, posts| %>

<div style="clear:left"><h2><%= monthname %></h2></div>

   <% for post in posts %>

     <div style="float:left;width:33%">  

    <ol class="posts">

      <% if post.status == 'new' %>
      <div class="new-post">
       <%= link_to edit_post_path(post) do %>
       <%= render post.first(80) %>
       <% end %>
     </div>

     <% else %>
     <div class="edited-post">
      <%= link_to post_path(post) do %>
      <%= render post %>
      <% end %>
    </div>
    <% end %>

  </ol>
    </div>
    <% end %>

当我更改行&lt;%= render post%&gt; to&lt;%= render post.first(80)%&gt;将它限制为前80个字符我得到错误:&#34;未定义的方法`第一个&#39;对于#&lt;发布:0xc5785e0&gt;&#34;。截断也是如此。

我无法将截断放在_post部分中,因为当点击特定帖子时它会截断它,这不是我想要的。如何为这个帖子添加帖子,帖子限制为一定数量的字符?

已编辑添加 我的帖子部分:

<div id="post-<%= post.id %>">
  <span class="timestamp">
    <%= post.created_at.strftime('%A, %b %d')%>
      <span class="content"><%= post.content %></span>
  </span>
</div>

2 个答案:

答案 0 :(得分:0)

  

我不能将截断放在_post部分中,因为当单击特定帖子时它会截断它,这不是我想要的。

自然。然后,这需要两种解决方案之一。

  1. 在渲染之前截断帖子对象的文本,或以其他方式使帖子部分看到缩短的文本(例如,使用Presenter模式)

    <% for post in posts %>
      <% post.title = truncate(post.title) %> // truncate
      <%= render post %> // then render
    
  2. 使用其他部分内容在索引页面上呈现帖子,内部为truncate的帖子。

答案 1 :(得分:0)

尝试:

<%= render partial: 'post', :locals => {:post => post, :length => 80} %>

在你的部分中,

<div id="post-<%= post.id %>">
  <span class="timestamp">
    <%= post.created_at.strftime('%A, %b %d')%>
      <span class="content"><%= length.present? ? post.content.first(length) : post.content %></span>
  </span>
</div>