отладка ошибки ruby ​​on rails - PullRequest
0 голосов
/ 07 ноября 2010

Я новичок в ruby ​​on rails, поэтому я пытаюсь отладить полученную ошибку, но, насколько я понимаю, работает над кодом prod.

Ошибка:

NoMethodError in JoinController#index
undefined method `join_template' for nil:NilClass
/app/controllers/join_controller.rb:5:in `index'

Хорошо, поэтому строка 5 в индексе:

elsif current_brand.join_template == 'tms'

Итак, current_brand - ноль.Контроллер является дочерним классом AppController, поэтому, проверяя это, я вижу, что current_brand - это метод:

  def current_brand
    return @current_brand if defined?(@current_brand)
    url_array = request.env['HTTP_HOST'].split('.').reverse
    url = url_array[1] << "." << url_array[0]
    @current_brand = Brand.find(:first, :conditions => ["url LIKE ?", "%" << url << "%"])
  end

Кажется, что @current_brand всегда возвращается, но он по-прежнему равен Nil.В чем может быть проблема?

Ответы [ 3 ]

2 голосов
/ 07 ноября 2010

Возможно, ваш запрос ничего не возвращает. Вы можете использовать отладчик, но довольно просто вывести @ current_brand и посмотреть, что он оценивает.

logger.debug(@current_brand)
1 голос
/ 07 ноября 2010

Вы должны проверить две вещи:

  1. Правильно ли Rails создает запрос SQL с URL-адресом, переданным в последней строке этого метода?
  2. Есть ли запись в таблице брендов? вы на самом деле не проверяете это.

Кроме того, передача URL-адреса подобным образом открывает вам возможность для потенциальной атаки SQL-инъекцией.

0 голосов
/ 07 ноября 2010

Вам нужно переписать определение с помощью команды спасения или если / иначе, так что если вы получите нулевой элемент, это не будет фатальной ошибкой.

Это ваша проблема:

@current_brand = Brand.find(:first, :conditions => ["url LIKE ?", "%" << url << "%"])

@current_brand не находит ничего, поэтому убедитесь, что вы что-то нашли.

@current_brand = Brand.find(:first)

Если это решит проблему, то вы знаете, что ничего не нашли, и вам придется изменить свой код, еслион возвращает nil, затем не предоставляет функцию или находит марку по умолчанию, такую ​​как я предложил.

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