0

act_as_votable ジェムを使用して、賛成票の数で質問を並べ替えようとしています。質問のセット全体を n 回表示することを除いて、すべて正常にソートされます。ここで、n は質問の数です。例えば。A、B、C の 3 つの質問を投稿すると、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

ギットハブ

助けてくれてありがとう!

4

3 に答える 3

1

あなたindex.html.erbはやっていrender @questionsます。これによりコレクション@questionsがレンダリングされるため、そのコレクション内の各アイテムがレンダリングされます。

でビューをレンダリングしています_question.html.erb。そのファイルには、<% @comment.questions.order("cached_votes_up desc").each do |question| %>. これで、 の各質問がレンダリングされ@commentます。

コメントをコメント ビューに表示してそのコメントの質問を表示するか、コメントとは別に一連の質問を表示する必要があります。両方を一緒に行うと、多様性が得られます。

于 2013-10-02T00:10:32.233 に答える
1

問題はあなたの_question.html.erb部分にあります。

で行う<%= render @questions %>index.html.erb、そのレンダー呼び出しがコレクションのループを処理し、それぞれ@questionsのパーシャルをレンダリングします。問題は、パーシャルですべての質問を で再度反復することです。_question.html.erbquestion<% @comment.questions.order("cached_votes_total desc").each do |question| %>

_question.html.erbこれを解決するには、の最初の行のループを削除するだけです<%= render @questions %>

<% @questions.each do |question| %>
  <%= render 'question', question: question %>
<% end %>

コレクションのレンダリングに関する Rails ドキュメント: http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-collections

于 2013-10-02T00:10:51.187 に答える
0

あなたの質問を読んでもあまり理解できませんでしたが、これは役に立ちます

<% @comment.questions.select("DISTINCT(questions.id), *").order("cached_votes_up desc").each do |question| %>
于 2013-10-02T00:05:28.737 に答える