Проблемы с Ruby - PullRequest
       3

Проблемы с Ruby

1 голос
/ 22 декабря 2010

Я не могу заставить этот цикл работать правильно

@mr = MediaRating.where("user_id = ?", session['user_credentials_id'])

unless @mr.empty?
  @mr.each do |rating|
    @m = Media.where("id = ?", rating.media_id)

    @m.each do |m|
      @history << m
    end
  end
end

В таблице MediaRating есть только 3 тестовых строки данных, но когда я вывожу данные на экран, массив @history содержит 9 записей. Я знаю, что это связано с тем, что я делаю неправильно с циклом, но не могу понять.

Рабочий код

Вид:

<!-- For Each -->
<% unless @history.empty? %>
  <% @history.each do |m| %>
    <tr class="control_result_row">
      <td class="control_result"><%= m.first.title %></td>
      <td class="control_result">Russian</td>
    </tr>
  <% end %>
<% else %>
  <tr class="control_result_row">
    <td class="control_result" colspan="2">You have no ratings logged</td>
  </tr>
<% end %>
<!-- End For Each -->

Контроллер:

@mr = MediaRating.where("user_id = ?", session['user_credentials_id'])
@mr.each do |rating|
  @m = Media.where("id = ?", rating.media_id)
  @history << @m
end

Ответы [ 2 ]

2 голосов
/ 22 декабря 2010

Сколько всего в таблице Media? Если это возвращает 3 вещи для каждого MediaRating, ваш цикл в порядке.

Кроме того, unless @mr.empty? не требуется, поскольку, если @mr пусто, блок each ничего не сделает.

Я думаю, это все, что вам нужно:

@mr = MediaRating.where("user_id = ?", session['user_credentials_id'])
@mr.each do |rating|
    @m = Media.where("id = ?", rating.media_id)
    @history << @m
end

@m = Media.where("id = ?", rating.media_id) должен возвращать только одну вещь, если id является ключом.

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

Я думаю, что вы добавляете неправильные значения в массив @history.Если вам нужна история mediaRating, вы должны добавить правильный рейтинг медиа.

@history << mr

или это похоже на проблему с данными.Проверьте зависимости внешнего ключа.

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