我有 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>
我不知道这是否正确,但我认为你最好在我们的控制器上准备好所有东西,所以视图只是为了显示它。它会让你的视图渲染得更快。但是,如果我错了,请纠正我。我认为@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
查看:views/questions/show.html.erb
<% @comments.each do |comment| %>
<%= comment.body %>
<% end %>
这种方式更干燥,更快,请问有什么问题,我会更新答案。而且我认为您的代码有错字。
<%= @comment.body %>
应该
<%= comment.body %>
因为它|comment|
不再调用您的别名而不是您的变量@comment
。也因为您完成了 call comment.body
,我认为您.select(:body)
不再需要查询。
希望能有所帮助。
使用send
:@comment.send( :select, :body ) # etc.
您正在显示问题的最后 2 条评论。
关联:问题 has_many comments
@question.comments.select("body").order("created_at desc").limit(2).each do |comment|
comment.body
end