我有2個模型:評論和問題。我試圖在問題頁面上顯示最後2條評論。私人方法`選擇'錯誤
繼承人的行:
<% @comment.select(:body).order('created_at desc').limit(2).each do |comment| %>
<%= @comment.body %>
<% end %>
我收到此錯誤:
private method `select' called for #<Comment:0x0000010465ac70>
我有2個模型:評論和問題。我試圖在問題頁面上顯示最後2條評論。私人方法`選擇'錯誤
繼承人的行:
<% @comment.select(:body).order('created_at desc').limit(2).each do |comment| %>
<%= @comment.body %>
<% end %>
我收到此錯誤:
private method `select' called for #<Comment:0x0000010465ac70>
使用send
:@comment.send(:select, :body) # etc.
你是顯示問題的最後2條評論。
協會: 問題的has_many評論
@question.comments.select("body").order("created_at desc").limit(2).each do |comment|
comment.body
end
嗯,這給了我一個'未定義的方法'評論''的錯誤。當問題屬於評論時,是否仍然有問題has_many評論? – user2759575
您必須定義您的@question = Question.where(:id => params [:id]) – joreal
是的,您需要has_many:Question模型中的註釋才能使用。 –
我不知道,如果這個權利,但我認爲你最好準備我們的控制器上的所有,這樣的觀點只是爲了顯示它。這會讓你的視圖渲染速度更快。但如果我錯了,請糾正我。我認爲@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)
。
希望能有所幫助。
謝謝你的答案,這是一個更清潔。不幸的是,現在我得到了來自控制器的'nil:NilClass''未定義的方法'註釋'。 – user2759575
嘗試追蹤從您以前的視圖發送的'params'。我的意思是,'params [:id]'可以是'params [:something]',根據你所謂的'id'。你能遵循嗎? – ksugiarto
糟糕,我忘了將第一個ine添加到控制器。即使我之前的視圖具有相同的參數[:id],現在我得到'找不到沒有ID的問題'。 – user2759575
這給了我一個錯誤的參數類型Symbol(expected Array)錯誤。 – user2759575
在這種情況下,輸入'@ comment.method(:select).source_location',打開指定的文件,並查看'Comment'類的'select'方法需要什麼類型的參數。你作爲用戶必須知道你想用什麼參數來調用你的方法。 –