Как сделать частичный индекс в Rails3 - PullRequest
1 голос
/ 22 января 2011

На панели инструментов я пытаюсь отобразить частичное в виде таблицы (индекс)

Мой частичный: _transaction.html.erb Эта часть на самом деле является индексом, основанным на индексе транзакций. Он должен вернуть все транзакции в таблице. Мой частичный содержит:

  <% @transactions.each do |transaction| %>
   <tr>
    <td><%= transaction.transaction_type %></td>
    <td><%= transaction.date %></td>
   </tr>
  <% end %>

Я получаю ошибку:

"У вас есть нулевой объект, когда вы этого не ожидали! Возможно, вы ожидали экземпляр Array. Произошла ошибка при оценке nil.each "

1 Ответ

2 голосов
/ 22 января 2011

Это может указывать на то, что ваше действие TransactionsController#index ничего не возвращает для @transactions. Наиболее очевидная причина в том, что любая логика, которую вы используете для поиска записей, не работает, возвращает 0 результатов или неправильно устанавливает @transactions. В подобных представлениях вы хотите выполнить проверку ошибок для ситуации, когда у вас нет результатов (или какой-либо ошибки).

Ваш просмотр index.html:

<% if !@transactions || @transactions.length == 0 %>
    <p>'No transactions found.'</p>
<% else %>
    <table>
        <!-- put your column headers here -->
        <!-- the next line iterates through each transaction and calls a "_transaction" partial to render the content -->
        <%= render @transactions %>
    </table>
<% end %>

Ваша частичная _transaction.html.erb:

<tr>
    <td><%= transaction.transaction_type %></td>
    <td><%= transaction.date %></td>
</tr>

Это заставит ваш взгляд снова работать. Следующий шаг - выяснить, почему действие вашего контроллера не возвращает результаты. Для начала откройте консоль rails и попытайтесь получить записи:

>> Transaction.all

Если это возвращает какие-либо результаты, значит, у вас есть данные. Если нет, создайте запись либо через веб-интерфейс, который вы разработали, либо через консоль rails:

>> t = Transaction.new()
>> t.transaction_type = 1 #or whatever is appropriate for your application
>> t.date = Date.today
>> t.valid? #if true, your record will save. If not, you need to fix the fields so they validate
>> t.save

Как только у вас будет запись, снова протестируйте свой вид. Если по-прежнему происходит сбой, возможно, у вас есть ошибка в логике контроллера. Что касается того, что это может быть за ошибка, вам нужно будет опубликовать ее, чтобы мы могли вам в этом помочь. :)

...