我有一个名为blogger的控制器:
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
,但它仍然提供相同的错误消息。我也在控制器中尝试了new
,就像这个@suggestedPosts = posts.new.similar_posts
一样,它仍然给我同样的错误。
关于如何克服这个问题的任何建议?
答案 0 :(得分:1)
您有2个问题同时发生。首先是您在通话中使用posts
,当您应该使用更像post.blogger
的内容时。具体对象取决于您的意图。
第二个问题是你在关联时调用similar_posts
,而不是在单个记录上。这可以通过在关联上调用each
来解决。
所以,把它们放在一起看看你可能有什么意思,我想你可能已经把它作为suggestedPosts
方法了:
def suggestedPosts
posts = Post.all
@suggestedPosts = posts.map {|post| post.blogger.similar_posts }
end
我还将@suggestedDevelopers
的名称更改为@suggestedPosts
,因为在这种情况下我不认为您的意思是“开发人员”。这应该会让你更接近你想要的东西。