2016-05-05 5 views
1

私はブロガーと呼ばれるコントローラがあります。未定義方法 - レール

class BloggerController < ApplicationController 

    def home 
    end 

    def favoritePosts 
    @blogger = current_blogger 
    @favorites = @blogger.favorite_posts 
    end 

    def suggestedPosts 
    posts = Post.all 
    @suggestedPosts = posts.similar_posts 
    end 

end 

をやBloggerモデルで、私は方法があります:私はそのは私にエラーを与えるサーバーを実行すると

def similar_posts 
title_keywords = Post.body.split(' ') 
    Post.all.sort do |post1, post2| 
    post1_title_intersection = post2.body.split(' ') & title_keywords 
    post2_title_intersection = post2.body.split(' ') & title_keywords 
    post2_title_intersection.length <=> post1_title_intersection.length 
end 
end 

を:

undefined method `similar_posts' for #<Post::ActiveRecord_Relation:0x007fa365029760> 

stackoverflowの上で検索した後、私はdef self.similar_postsを試してみましたが、それはまだ同じエラーメッセージを表示します。私はまた@suggestedPosts = posts.new.similar_postsのようなコントローラでnewを試してみましたが、それでも私は同じエラーが出ます。 これを克服する方法の提案はありますか?

+0

問題は、投稿にBlogger.Methodを使用していることです。投稿にそのようなメソッドはありません。 Postで定義してください – Boltz0r

+0

'similar_posts'が' posts'オブジェクトで定義されていて 'posts'に定義されていないので、' @suggestedDevelopers = posts.map(&:similar_posts) ' –

+0

で' similar_posts'メソッドを呼び出そうとしています。オブジェクトの配列'posts.first.similar_posts'を試してください –

答えて

1

同時に2つの問題が発生しています。最初に、電話でpostsを使用している場合、post.bloggerのようなものを使用する必要があります。特定のオブジェクトは、あなたの意図が実際にどのようなものかによって異なります。

第2の問題は、個々のレコードではなく、アソシエーション上でsimilar_postsを呼び出していることです。これは、アソシエーション上のeachへの呼び出しによって解決できます。私はので、私はまた、@suggestedPosts@suggestedDevelopersの名前を変更し

def suggestedPosts 
    posts = Post.all 
    @suggestedPosts = posts.map {|post| post.blogger.similar_posts } 
end 

だから、一緒にそれらを入れて、あなたが意味しているかもしれないものを見て、私はあなたのsuggestedPosts方法としてこれを意図したと思われますこの場合、「開発者」を意味するとは思わないでください。これは、あなたが試していたと思われるものに近いものを与えるはずです。

関連する問題