控制器中未定义的方法 - 导轨

时间:2016-05-05 15:25:04

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个名为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一样,它仍然给我同样的错误。 关于如何克服这个问题的任何建议?

1 个答案:

答案 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,因为在这种情况下我不认为您的意思是“开发人员”。这应该会让你更接近你想要的东西。