2016-10-19 9 views
1

私はRails 4ブログのacts_as_taggable宝石に苦労しています。誰かが私を正しい方向に向けてくれることを願っています。各投稿のショービュー内に、私は現在タグを表示しています。しかし、タグの下に、私は同じタグを使って投稿のプレビューを表示したい( "XYZについてもっと読む記事を読む:")。ここでは動作しません。これは、私が持っているコードです:Acts_as_taggable gem:各投稿のショーページに同じタグの投稿のサムネイルを表示するにはどうすればいいですか?

tags_controller.rb:

def index 
    @tags = ActsAsTaggableOn::Tag.all 
    @posts = Post.tagged_with(@tag.name) 
    @related_posts = Post.tagged_with(@tag, :on => :tags) 
end 

posts_controller.rb:

def index 
    if params[:tag] 
    @posts = Post.tagged_with(params[:tag]) 
    else 
    @posts = Post.all 
    end 
    . 
    . 
    . 
end 

ビュー/記事/ show.html .erb

<%= image_tag @post.image.url(:large) %> 
    <%= @post.title %> 
    <%= @post.subtitle %> 
    <%= @post.body.html_safe %> 
    <h3>Read more posts about: <%= render @post.tags %></h3> 

    <!-- This is where I want to display related posts: --> 
    <%= render 'tags/related' %> 

ビュー/タグ/ _related.html.erb

<% @posts.each do |post| %> 
     <%= link_to image_tag(post.image.url(:small)), post%> 
     <%= link_to post.title, post %> 
    <% end %> 

ALL記事は部分_related.html.erb内インデックスが作成されているので、これは間違っている - 同じタグを持つだけではなく投稿その単数のポストのショービュー内に表示されます。私は@postsをPost.tagged_with(@ tag.name)としてタグコントローラに定義していたので、これはうまくいくと思った。

答えて

0

基本的には、投稿から投稿まで、タグを使ってhas_many関係を実行します。

Postモデルで、関連する投稿の配列を生成するメソッドを作成します。その方法で

def related_posts 
    post_ary = Post.tagged_with(self.tags, :any => true) 
    post_ary.uniq.delete(self) 
end 

注キーの事:

  • あなたは、関連記事のリストにポスト自体を含めたくない - それゆえ.delete(self)
  • acts_as_taggable_on逸品のためのいくつかの素晴らしい方法を提供しますあなたがそれらを読んで、何か他にあなたが使いたいものがあるかどうかを調べるべきです。

<h3>Read more posts about: <%= render @post.tags %></h3> 

<!-- This is where I want to display related posts: --> 
<%= render 'tags/related', locals { post: @post} %>  

そして、あなたの部分

<% post.related_posts.each do |rp| %> 
    <%= link_to image_tag(rp.image.url(:small)), rp %> 
    ... 
%> 

脚注:あなたはビューを行うよう

あなたは、同じコントローラのアクションを提示しなければならない - あなたはポスト/ indexアクションを私たちに提供してきましたが、ポスト/ショービュー。

+0

は、この詳細かつ有用な応答をありがとうございました。私は2つの質問があります:1)私はhas_manyが必要ですか:ポストモデルの関連記事ですか? 2)投稿したモデルに投稿したpost.rbコードを配置しました。何らかの理由で、私は分かりません、私はポストショーページを読み込むときに "未定義のメソッド' related_posts '"エラーが発生しています。私が間違っているかもしれない何かアイデア?あなたの時間をもう一度ありがとう。 – Noob005

+0

1)いいえ、あなたは間違いなくhas_many関係の投稿を必要としません。 'related_posts'はメソッドであり、関係ではありません。 2)レールコンソール( 'rails c')を開き、' post = Post.first'でポストを読み込み、 'post.related_posts'と入力します。 –

+0

ありがとう。 "NoMethodError:未定義のメソッド' postss for# " – Noob005

1

免責事項:私は今日と同じ問題に直面し、このために定義された方法で、find_related_tags方法があるらしいことが判明ROR

の非常に基本的な知識を持っています。

だから私はあなたの関連ビューでのようなものを使用できることを推測:あなたはあなたができる結果を制限したい場合は

ビュー/タグ/ _related.html.erb

<% @posts.find_related_tags.each do |post| %> 
     <%= link_to image_tag(post.image.url(:small)), post%> 
     <%= link_to post.title, post %> 
    <% end %> 

を... @ posts.find_related_tags.first(3).each ... おそらく、確かに結果の出力を制限する良い方法がありますが、これは私が使用したものです。

あなたはここに多くの情報を見つけることができます。

rubydoc

関連する問題