2017-05-25 2 views
0

私は自分のブログのようなアプリケーションに問題があります。Ruby on Railsのレンダリングされた投稿で、切り詰める(または表示される単語の量を制限する)のは可能ですか?

私は本質的に_post部分を使って表示される投稿を持っています。私はこの2つの異なる方法を使用します:フィードの一部として(すべての投稿を表示する)、特定の投稿がクリックされたとき。

投稿が投稿全体に含まれている場合、私は物事をきれいに保つために表示される文字数を制限したいと考えています。これは、ポストがフィードに表示されている方法です。<%に

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

私はラインを変更<% =レンダリングポスト%> = post.first(80)をレンダリング%>最初の80文字に制限します私はエラーが発生します: "#< Post:0xc5785e0>"の未定義メソッド `first '。トランケートでも同じことが起こります。

切り捨てを_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

は、あなたが '' link_to'の内側にやっrender'は何 – Sajin

+1

部分あなたの投稿を共有していただけますか? – Pavan

+0

これを試してください。https://apidock.com/rails/String/truncate –

答えて

0

I can't put the truncate in the _post partial because then it will truncate it when the specific post is clicked on, which is not what I want.

を。これは2つの解決策の1つを必要とします。

  1. さもなければ切り捨て前レンダリングに対するポスト・オブジェクトのテキスト、またはポスト部分を参照短縮テキスト(例えば、プレゼンターパターンを使用)

    <% for post in posts %> 
        <% post.title = truncate(post.title) %> // truncate 
        <%= render post %> // then render 
    
  2. がオン投稿をレンダリングするための別の部分を使用しますインデックスページ、内側にtruncateのインデックスページ。

+0

最初のソリューションをもう少し拡張できますか?私は現在のコードにそれをどのように統合するのかをよく理解していませんが、最高のアプローチのように聞こえます。 – Andrew

+0

@Andrew:特にそれについてあなたが理解していないものはありますか? –

+0

私は現在、投稿全体をレンダリングしていますが、私は "post.title"をレンダリングする方法はわかりません(私は自分の投稿やタイトルにタイトル欄を与えていません)。私は自分のコードをコピーして貼り付けてみましたが、それは動作しませんでした。 – Andrew

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

私は、エラーが「{locale => [:en]、:formats => [:html]、:variants => []、:handlers =>という部分ユーザー/ _post、application /私のポストの部分は、投稿と呼ばれるフォルダの私の意見にあります – Andrew

+0

それを「ポスト/ポスト」に変更してください。[:raw、:erb、:html、:builder、:ruby、:coffee、:jbuilder] – Sajin

関連する問題