Перемещение этого действия, которое работает в представлении представления в представление индекса (Rails)? - PullRequest
0 голосов
/ 08 февраля 2012

Вот как пользователь голосует за текущий пост, который он показывает:

Контроллеры / votes_controller.rb:

class VotesController < ApplicationController
  def vote_up
    @post = Post.find(params[:id])

    if @post.votes.exists?(:user_id => current_user.id)
      @notice = 'You already voted'
    else
      @vote = @post.votes.create(:user_id => current_user.id, :polarity => 1)
    end

    respond_to do |format|
      format.js
    end
  end

Это обновляет общее количество голосов с Ajax:

vote_up.js.erb:

<% unless @notice.blank? %>
  alert("<%= @notice %>");
<% end %>

<% unless @vote.blank? %>
  $('.post-<%=@post.id%> span.vote-count').html('<%= @post.votes.count %>');
  $('.post-<%=@post.id%> div.voted-user').html('<% @post.votes.each do |vote| %><%= link_to vote.user.username, vote.user %><% end %>');
<% end %>

Это ссылка для голосования в режиме просмотра:

просмотров / сообщений / show.html.erb:

<%= link_to "Vote Up", vote_up_path(@post), :remote => true, :class => "vote-up" %><br />

и маршрутизация для действия:

routes.rb:

get 'votes/:id/vote_up' => 'votes#vote_up', as: 'vote_up'

Вот как все сообщения отображаются в индексном представлении:

просмотров / сообщений / index.html.erb:

<% @posts.each do |post| %>
    <h2>Title: <%= post.title %></h2>
    <p>Author: <%= post.user.username %></p>
    <p>Created At: <%= post.created_at %></p>
    <p>Content: <%= post.content %></p>
    <p>Votes: <%= post.total_votes %></p>
    <p>Comments: <%= post.comments_count %></p>
    <ul>
      <li><%= link_to 'Show', post %></li>
      <li><%= link_to 'Edit', edit_post_path(post) %></li>
      <li><%= link_to 'Destroy', post, confirm: 'Are you sure?', method: :delete %></li>
    </ul>
    <br />
  <% end %>

Я хотел бы добавить ссылку для голосования в представлении index.html.erb для каждого сообщения или найти способ вызвать действие vote_up для каждого сообщения в представлении индекса. Любые предложения для этого?

1 Ответ

1 голос
/ 08 февраля 2012

Я думаю, что я, должно быть, полностью упускаю суть здесь, но почему вы не можете просто сделать следующее в блоке, отображающем каждое сообщение?

<%= link_to "Vote Up", vote_up_path(post), :remote => true, :class => "vote-up" %>

Обратите внимание, что я использую post не @post.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...