2013-10-26 33 views
0

我有2個模型:評論和問題。我試圖在問題頁面上顯示最後2條評論。私人方法`選擇'錯誤

繼承人的行:

<% @comment.select(:body).order('created_at desc').limit(2).each do |comment| %> 
<%= @comment.body %> 
<% end %> 

我收到此錯誤:

private method `select' called for #<Comment:0x0000010465ac70> 

回答

0

使用send@comment.send(:select, :body) # etc.

+0

這給了我一個錯誤的參數類型Symbol(expected Array)錯誤。 – user2759575

+0

在這種情況下,輸入'@ comment.method(:select).source_location',打開指定的文件,並查看'Comment'類的'select'方法需要什麼類型的參數。你作爲用戶必須知道你想用什麼參數來調用你的方法。 –

0

你是顯示問題的最後2條評論。

協會: 問題的has_many評論

@question.comments.select("body").order("created_at desc").limit(2).each do |comment| 
    comment.body 
end 
+0

嗯,這給了我一個'未定義的方法'評論''的錯誤。當問題屬於評論時,是否仍然有問題has_many評論? – user2759575

+0

您必須定義您的@question = Question.where(:id => params [:id]) – joreal

+0

是的,您需要has_many:Question模型中的註釋才能使用。 –

0

我不知道,如果這個權利,但我認爲你最好準備我們的控制器上的所有,這樣的觀點只是爲了顯示它。這會讓你的視圖渲染速度更快。但如果我錯了,請糾正我。我認爲@joreal的回答是非常正確的。你有沒有試過這個?

型號:question.rb

class Question < ActiveRecord::Base 
    has_many :comments 

    # some more code 
end 

控制器:questions_controller.rb

def show 
    @question = Question.find(params[:id]) 
    @comments = @question.comments.order(:created_at).limit(2).reverse_order 

    # some more code 
end 

查看:意見/問題/ show.html.erb

<% @comments.each do |comment| %> 
    <%= comment.body %> 
<% end %> 

這種方式更幹,更快,請有什麼不對,我會更新答案。我認爲你的代碼有一個錯字。

<%= @comment.body %> 

應該

<%= comment.body %> 

因爲它叫你的別名|comment|不是你的變量了@comment。此外,因爲您完成了名爲comment.body的工作,所以我認爲您不再需要.select(:body)

希望能有所幫助。

+0

謝謝你的答案,這是一個更清潔。不幸的是,現在我得到了來自控制器的'nil:NilClass''未定義的方法'註釋'。 – user2759575

+0

嘗試追蹤從您以前的視圖發送的'params'。我的意思是,'params [:id]'可以是'params [:something]',根據你所謂的'id'。你能遵循嗎? – ksugiarto

+0

糟糕,我忘了將第一個ine添加到控制器。即使我之前的視圖具有相同的參數[:id],現在我得到'找不到沒有ID的問題'。 – user2759575