我在构建博客时遇到了问题。
基本上我有使用_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>
答案 0 :(得分:0)
我不能将截断放在_post部分中,因为当单击特定帖子时它会截断它,这不是我想要的。
自然。然后,这需要两种解决方案之一。
在渲染之前截断帖子对象的文本,或以其他方式使帖子部分看到缩短的文本(例如,使用Presenter模式)
<% for post in posts %>
<% post.title = truncate(post.title) %> // truncate
<%= render post %> // then render
使用其他部分内容在索引页面上呈现帖子,内部为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>