разное поведение одного и того же кода

 
0
 
Ruby
ava
m_maxser | 09.04.2013, 15:27
Здравствуйте,
Есть код, точнее маленькая часть кода, которая безоговорочно работает на машине свего автора и на сервере. А вот у меня работает не всегда. На поиск причины потратил кучу времени, но ничего не нашел. Везде Ruby 1.8.7 и Rails 3.0.11. Сервер - Linux. У меня и у автора кода W7. Вообще компы у нас отличаются только железом.

Проблема с моей стороны выглядит так: я запускаю проект (Rails start) -> все работает -> перехожу на страницу с тем самым кодом -> получаю ошибку undefined method for nil:NilClass.

Если получилось так как я описал, то я просто перезапускаю рельсы (Rails start) до тех пор пока этот код не начнет работать. Иногда все работает вообще с первого раза, иногда нужно до 10 перезапусков, но рано или поздно оно начинает работать. В чем дело?

Теперь подробнее...
есть две модели

class Publication < ActiveRecord::Base
  ...
  has_many :params
  ...
  accepts_nested_attributes_for :params
  ...


class Param < ActiveRecord::Base
  ...
  belongs_to :publication
  belongs_to :characteristic
  ...
  def value=(value)
      if characteristic.is_a? Characteristic::Bool
          self.string_value = value
          self.bool_value   = !value.blank?
      else
          self.send(self.characteristic.methodname+ '=', value)
      end
  end

...
end

ошибка возникает в контроллере публикации во время множественного присваивания

publication = Pulication.first
chrs = Characrestic.all
characteristics_params = [{:characteristic => chrs[1], :value => 'value1'}, {:characteristic => chrs[2], :value => 'value2'}, {:characteristic => chrs[3], :value => 'value3'} ...]
publication.params_attributes = characteristics_params # ==> вот в этот момент может заглючить 

Т.е. последняя строка передает каждый из вложенных хешей в метод "value=", модели Param. Если конкретный (Rails start) был удачным, то у publication будет коллекция params, содержащая нужные мне данные. Но если рельсы, почему-то, криво запустились, то в метод "value=" из хеша передастся только value, а characteristic_id будет равен nil. Т.е. self.inspect выведет:

#<Param id: nil, characteristic_id: nil, ...>

и соответственно я получаю ошибку

undefined method 'methodname' for nil:NilClass

Думаю, что проблема не связана с "accepts_nested_attributes_for". Проблема скорее всего в получении данных accessor-методом "value=". Т.к. эту же ошибку может вызвать код вроде:

p = Param.new(characteristics_params[0])

P.S.: Код программы сильно упрощен, особенно код контроллера. Но этого достаточно для понимания ситуации.
Comments (2)
ava
bilbobagginz | 18.04.2013, 22:33 #
в обоих случаях web server тот же ? те же версии ?
ava
m_maxser | 23.04.2013, 06:52 #
у меня и у разработчика WEBrick, на хостинге - аппач
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit