Я случайно (как кажется) получаю ошибку nil.each на моем локальном хосте. Чувствовал себя довольно уверенно в коде, поэтому я подтолкнул его к героку, и он прекрасно работает там.
Вот мой код просмотра:
<h2><%=@book.name.upcase%></h2>
<br />
<% @book.chapters.each do |chapter| %>
<h3>Chapter <%=chapter.number%></h3>
<% chapter.verses.each do |verse| %>
<b><%=verse.number%>)</b> <%=verse.body%>
<% end %>
<br /><br />
<% end %>
Сначала все, что у меня было в контроллере, было что-то вроде @book = Book.find(params[:id])
, и это работало нормально, за исключением скорости. Затем я изменился на это:
def show
if params[:book_name]
#@book = Book.find_by_sql(["select * from books where UPPER(name) = UPPER(?)", params[:book_name]]).first
@book = Book.where(["UPPER(name) = UPPER(?)", params[:book_name]]).includes(:chapters => :verses).first
raise ActiveRecord::RecordNotFound, "Page not found" if @book.nil?
elsif params[:id]
@book = Book.find(params[:id].to_i, :include => {:chapters => :verses})
end
end
Теперь я случайно получаю эту ошибку:
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
...
app/controllers/books_controller.rb:14:in `show'
Разница лишь в том, что heroku использует postgre, а я использую mysql.
URL Heroku: http://kjv -on-rails.heroku.com / books / 1
Полный код заявки: https://github.com/tybro0103/KJV-on-Rails
Обновление
Я только что проверил Full Trace и понял, что здесь происходит ошибка:
mysql2 (0.2.6)
Библиотека / active_record / connection_adapters / mysql2_adapter.rb: 635: в
`select '
Итак, ошибка происходит в самоцвете mysql2.
Примечание
Мне стало известно, что у меня странные / избыточные отношения и данные. Я понимаю это, я обещаю! Я не верю, что это вызывает ошибку, хотя. :)
Примечание
Случайно вот что я имею в виду ... В некоторых книгах я никогда не вижу этой ошибки. В других я вижу 90% времени, в то время как в других я вижу это 50% времени. Я просто нажимаю «Обновить» снова и снова, и иногда это работает, а иногда нет. Я думаю, что единственный способ действительно понять, что я имею в виду, это загрузить код самостоятельно. Я думаю, никто не хочет, а это значит, что я начну вознаграждение через пару дней в качестве стимула. :)
UPDATE
Так что ошибка происходит в адаптере mysql2. Самое смешное, что @book = Book.find(params[:id].to_i, :include => {:chapters => :verses})
вызывает ошибку при запуске сервера rails. В консоли rails я могу запускать одну и ту же команду весь день, и она отлично работает. Он использовал webrick, но я попытался переключиться на mongrel и получил ту же ошибку. Я также попытался перейти с ruby 1.8.7 на 1.9.2 и получить ту же ошибку. Кажется, может быть, есть какой-то предел памяти на сервере rails, может быть?