Устранение активности current_user из записей, возвращаемых через сложную связь - PullRequest
0 голосов
/ 30 декабря 2010

Я создал приложение Ruby on Rails (Rails 2.3.9), которое позволяет пользователям отслеживать тренировки. После создания тренировки другие пользователи могут комментировать эту тренировку. Сейчас я работаю над индексным представлением Dashboard, чтобы отобразить последние действия.

В этом конкретном разделе я пытаюсь отобразить комментарии от всех тренировок, которые прокомментировал current_user. Я успешно извлекаю эти комментарии, упорядочиваю их и ограничиваю вывод с помощью приведенного ниже кода.

Я сейчас пытаюсь исключить комментарии текущего пользователя. Вот код:

/ вид / панель / index.html.erb

  <% unless current_user.comment_stream.blank? %>
      <h3>Recent Comments from WODs you commented on</h3>
        <% current_user.comment_stream[0,10].each do |comment| %>
          <p>
             Comment from <%= link_to (comment.user.username), comment.user %> 
             <%= time_ago_in_words(comment.created_at) %> ago on Workout: 
             <%= link_to (comment.workout.title), comment.workout %>
          </p>
        <% end %>
  <% end %>

User.rb

  def workouts_on_which_i_commented
    comments.map{|x|x.workout}.uniq
  end

  def comment_stream
   workouts_on_which_i_commented.map do |w|
     w.comments
   end.flatten.sort{|x,y| y.created_at <=> x.created_at}
  end

Пример задачи :

Вот пример того, что происходит с этим кодом:

Пользователь A создает тренировку, а Пользователь B комментирует ее. Затем пользователь C и пользователь D также комментируют тренировки пользователя A. В виде панели пользователя пользователя B я хочу, чтобы он видел комментарии пользователя C и пользователя D в потоке активности ... но я не хочу, чтобы он видел свои собственные комментарии.

Я мог бы просто использовать <% unless comment.user_id == current_user.id %>, но это портит количество отображаемых записей, так как они вылавливаются до линии исключения.

1 Ответ

0 голосов
/ 30 декабря 2010

В comment_stream вы можете добавить отфильтрованные вами комментарии

def comment_stream
  workouts_on_which_i_commented.map do |w|
    w.comments
  end.flatten.reject{|c| c.user_id == current_user.id}.sort{|x,y| y.created_at <=> x.created_at}
end
...