Получение уникальных значений из цикла в рельсах

У меня есть так, что у меня есть список уникальных пациентов, с которыми разговаривает клиницист. Я могу вызвать информацию о пациентах, но я не могу вызвать ничего общего с соответствующим комментарием.

приложение\представления\комментарии\index.html.erb

    <% @comments.map(&:patient).uniq.each_with_index do |comment, index| %>
      <div class="profile-post color-one">
          <span class="profile-post-numb"><%= index+1 %></span>
          <div class="profile-post-in">
              <h3 class="heading-xs"><a><%= link_to "#{comment.first_name} #{comment.last_name}", comment_path(comment) %></a></h3>
              <p><%= comment.diagnosis %><i class="pull-right"><%= link_to "Edit", edit_comment_path(comment) %> <%= link_to "Delete", comment_path(comment), method: :delete, data: {confirm: 'Are you sure you want to delete'} %></i></p>
          </div>
      </div>
    <% end %>

Link_to также не работает, так как предполагается, что они ведут на страницу комментариев, но вместо comment.id передают пациент.

comments_conrtoller.rb

def index
 @comments = current_clinician.comments
end

комментарий.rb

class Comment < ActiveRecord::Base
 belongs_to :clinician
 belongs_to :patient
end

person Skiapex    schedule 16.03.2015    source источник


Ответы (1)


@comments.map(&:patient) дает объекты класса Patient, поэтому ссылки проходят patient_id вместо comment_id.

Вы должны использовать group вместо map здесь.

Что-то вроде @comments.group(:patient).. ; синтаксис цикла должен быть изменен для работы с выходными данными из этой области.

См. http://apidock.com/rails/v4.0.2/ActiveRecord/QueryMethods/group, чтобы узнать больше о том, как работает group.

person Prakash Murthy    schedule 16.03.2015
comment
Я все еще получаю: SQLite3:: SQLException: нет такого столбца: пациент: ВЫБЕРИТЕ комментарии. * ИЗ комментариев СГРУППИРОВАТЬ ПО пациенту. Я изменил представление на: code‹% @comments.group(:patient).each_with_index do |comment, index| %›code и контроллер на: codedef index @comments = Comment.all endcode Сейчас, пока я не заработаю. Я думаю, что я могу использовать «иметь», чтобы заставить его просто показывать те, которые принадлежат текущему пользователю. - person Skiapex; 16.03.2015
comment
@comments.group(:patient_id)... . Я бы посоветовал поиграть с этим в консоли, прежде чем выяснять, какую конструкцию цикла использовать. - person Prakash Murthy; 16.03.2015
comment
Лучший способ оказался таким: '‹% @comments.group(:patient_id).each_with_index do |comment, index| %>' Спасибо за вашу помощь! - person Skiapex; 16.03.2015
comment
Еще раз привет, Пракаш - ваше предложение отлично сработало локально, но выдало мне GroupingError, когда я нажал на героку. PG::GroupingError: ОШИБКА: столбец comment.id должен присутствовать в предложении GROUP BY или использоваться в агрегатной функции Если у вас есть какие-либо советы по этому поводу, мы будем очень признательны - person Skiapex; 15.04.2015