在索引视图中重复发布帖子

时间:2013-10-01 23:54:42

标签: ruby-on-rails

我试图通过使用acts_as_votable gem的upvotes数来对我的问题进行排序。一切都很好,除了它显示整套问题n次,其中n是问题的#。例如。我发布了3个问题A,B和C,它将显示ABC ABC ABC。

这是我的观看代码:

<% @comment.questions.order("cached_votes_up desc").each do |question| %>

这是我的控制器代码:

def upvote
@question = Question.find params[:id]
@question.liked_by current_user
redirect_to comment_questions_path
end

def index
@comment = Comment.find params[:comment_id]
@questions = @comment.questions
end

Github

感谢帮助!

3 个答案:

答案 0 :(得分:1)

index.html.erb你正在做render @questions。这将呈现集合@questions,以便为该集合中的每个项目呈现。

它正在_question.html.erb中呈现视图。在该文件中,您有<% @comment.questions.order("cached_votes_up desc").each do |question| %>。这就是为@comment呈现每个问题。

您真的想要在评论视图中呈现评论,并显示该评论的问题,或者呈现与评论无关的问题集。两者兼而有之,可以提供多重性。

答案 1 :(得分:1)

问题出在_question.html.erb部分。

当您在<%= render @questions %>中执行index.html.erb时,该呈现调用将负责循环@questions集合,并为每个{{1}呈现部分_question.html.erb }}。问题是,在您的部分内容中,您使用question再次迭代所有问题。

要解决此问题,您只需删除<% @comment.questions.order("cached_votes_total desc").each do |question| %>第一行中的循环,因为_question.html.erb与以下内容相同:

<%= render @questions %>

关于渲染集合的Rails文档:http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-collections

答案 2 :(得分:0)

通过阅读你的问题,我不太了解,但这可能会有所帮助

<% @comment.questions.select("DISTINCT(questions.id), *").order("cached_votes_up desc").each do |question| %>