2016-05-05 64 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> 

計算器上搜索後,我試圖def self.similar_posts但它仍然給出了同樣的錯誤消息。我也試過new這個控制器,就像@suggestedPosts = posts.new.similar_posts這樣仍然給我相同的錯誤。 有關如何解決這個問題的任何建議?

+0

問題是您在Post上使用Blogger.Method,Post中沒有這種方法。嘗試在Post上定義 – Boltz0r

+0

'similar_posts'在'post'對象上定義,而不是'posts',所以'@suggestedDevelopers = posts.map(&:similar_posts)' –

+0

您試圖調用'similar_posts'方法對象數組。請嘗試'posts.first.similar_posts' –

回答

1

您有兩個問題同時發生。首先是你在打電話時使用posts,當你應該使用更像post.blogger的東西。具體的對象取決於你的意圖實際是什麼。

第二個問題是您正在關聯關聯的電話similar_posts,而不是單個記錄。這可以通過在關聯上撥打each來解決。

因此,把那些在一起,看什麼你可能意味着,我認爲你可能已經打算將此作爲您suggestedPosts方法:

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

我也改變了@suggestedDevelopers名稱@suggestedPosts,因爲我在這種情況下,你不認爲你的意思是「開發者」。這應該讓你更接近你想要的東西。

相關問題