Ruby On Rails 3 - получает нулевое исключение и не понимает, почему - PullRequest
0 голосов
/ 25 марта 2011

Привет, я получил модель Категория и другую модель продукции.У отношения есть - has_and_belongs_to_many.

Когда я открываю консоль и набираю Category.first.products, я получаю список продуктов, привязанных к этой категории.

Но когда я пытаюсь сгенерироватьXML-файл с моделью показа, который я получаю:

undefined method `type' for nil:NilClass

Я протестировал приведенный ниже код на других моделях, которые установили отношения has_many, и он работает так, как я хочу, чтобы он работал.Но не будет работать с этими отношениями, может быть, это не имеет ничего общего с этим?

  def show

@categories = Category.find(params[:id])

@products = @categories.products

respond_to do |format|
  format.html # index.html.erb
  format.xml { render :xml => @products }
  format.json { render :json => @products }
end

end

Я новичок в этом, как вы можете видеть ...

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Спасибо за ваши ответы, я продолжал исследовать и экспериментировать с контроллерами, и просто попробовал. @ category.products. all , и это сработало. Печально то, что я не знаю, почему это произошло ... Особенно, когда это работает для меня в консоли ... Но я думаю, что я счастлив, что, так сказать, решил проблему одним способом ...

def show
@category = Category.find(params[:id])

@products = @category.products.all

respond_to do |format|
  format.html # show.html.erb
  format.xml { render :xml => @products }
end

конец

Но я буду использовать журнал и регистратор терминала, когда буду отлаживать больше, чем раньше! Спасибо за советы!

0 голосов
/ 25 марта 2011

В этом случае похоже, что ваша проблема вызвана странными (возможно, противоречивыми) данными. Попытайтесь увидеть (в вашей консоли) объект, который вызвал проблему - в вашем контроллере вы использовали какой-то конкретный идентификатор. Убедитесь, что Category.find(THIS_IS).products.to_xml также выдает ошибку.

Проверьте, может ли один Продукт вернуть что-то полезное в ответ на .to_xml.

Вы часто будете сталкиваться с подобными проблемами. Вы должны научиться их отлаживать.

Прежде всего, следите за следом. Вы, вероятно, видите это в своем веб-браузере, но все исключения обычно также помещаются в ваш log / development.log (зависит от среды).

В журнале разработки вы видите, что SQL-запросы выполняются до появления ошибки. Иногда они могут помочь вам найти, что не так. В этом случае вы можете проверить, какой тип модели был выбран SELECT непосредственно перед ошибкой. (это будет просто подсказка, а не решение)

В обратном следе вы смотрите файлы, которые вы отредактировали. Обычно ошибка будет в вашем коде. Если ваш код выглядит нормально, возможно, вы захотите увидеть другие файлы, указанные в обратном следе. Чтение кода Rails может дать вам некоторые подсказки. Иногда.

И вопрос: не смешались ли вы со свойством type в ваших моделях? Если да, то попробуйте переименовать такой атрибут во что-то еще.

Мы не можем дать вам более точный ответ. Я надеюсь, что вы найдете проблему. Кроме того, прежде чем начать исправлять ошибку, попробуйте написать для этого модульный тест: проверьте, не вызывает ли вызов .to_xml для одной из ваших моделей в тестовой базе данных исключение.

...