Метод .joins возвращает неверный идентификатор

ОБНОВЛЕНИЕ

У меня есть простое приложение rails с домашней страницей, отображающей альбомы с самым высоким рейтингом, с использованием этого кода в моем контроллере (используемый код из этого решения: Как отобразить альбомы с наивысшим рейтингом через отношение has_many Reviews):

def home
    @top_ratings = Album.joins(:reviews).select("*, avg(reviews.rating) as average_rating").group("albums.id").order("average_rating DESC")

    @top_seven = @top_ratings[0...7]
end

В моем файле home.html.erb я показываю каждый альбом и имею тег link_to, который перенаправляет пользователя на страницу показа альбома:

<tbody>
  <tr>
    <% @top_seven.each do |album| %>
      <td><%= link_to (image_tag album.picture, size: '150x150'), album_url(album)  %>    </td>
    <% end %>
  </tr>
</tbody>

Данные отображаются нормально, однако, когда я нажимаю на ссылку, я получаю сообщение об ошибке «неопределенное имя метода для nil: NilClass» на странице показа альбома.

На моем сервере rails я заметил, что идентификатор альбома, связанный с переменными @top_ratings и @top_seven, отличается от фактического идентификатора альбома, поэтому я получаю сообщение об ошибке.

Кто-нибудь знает, как реорганизовать @top_ratings, чтобы он возвращал альбомы с самым высоким рейтингом с их правильным номером идентификатора, чтобы ссылка работала правильно?


person Reuben    schedule 31.12.2013    source источник
comment
Какой у Вас вопрос?   -  person sawa    schedule 31.12.2013
comment
Вы видели запрос? Действительно ли :id отправляется в хэше params?   -  person Alex Lynham    schedule 31.12.2013
comment
Да, на моем сервере rails я получаю Parameters: {"id"=>"28"}, когда нажимаю ссылку на альбом   -  person Reuben    schedule 31.12.2013
comment
Это происходит с каждым альбомом или только с некоторыми?   -  person Alex Siri    schedule 01.01.2014
comment
Смотрите мой недавний пересмотр моего вопроса   -  person Reuben    schedule 03.01.2014


Ответы (2)


Когда Album.find_by_id(params[:id]) не соответствует, @album становится nil. NilClass не имеет метода с именем name.

person sawa    schedule 31.12.2013
comment
Я отредактировал свой вопрос выше, но, по сути, переменная @top_ratings возвращает правильный список альбомов, но у них неправильные номера идентификаторов, поэтому link_to не работает, в настоящее время я ищу способ рефакторинга переменная, поэтому она возвращает альбомы с их правильным номером идентификатора. - person Reuben; 03.01.2014

Изменив приведенный выше код:

<td><%= link_to (image_tag album.picture, size: '150x150'), album_url(album) %></td>

К этому:

<td><%= link_to (image_tag album.picture, size: '150x150'), album_url(album.album_id) %></td>

Он получит правильный идентификатор альбома и позволит link_to работать правильно.

person Reuben    schedule 02.01.2014