Как сохранить идентификатор в классе модели - PullRequest
0 голосов
/ 28 июля 2010

Это должно быть легко. Я не уверен точно, как озаглавить вопрос, хотя. У меня есть коллекция модулей, которые могут быть добавлены в мою CMS (страница, ссылка, форма ...), все они связаны посредством полиморфной ассоциации с одной таблицей, которая управляет общими вещами, такими как происхождение, и включены ли они и т. Д. Например, поскольку я создаю «страницу», я автоматически обрабатываю создание этой другой записи таблицы. Все, что мне нужно передать - это parent_id. Для этого я создал прокси через модель страницы:

  def parent_id=(parent_id)
    @parent_id = parent_id.blank? ? nil : parent_id.to_i
    component_instance.parent_id = @parent_id
  end

  def parent_id
    @parent_id ||= component_instance.parent_id
  end

component_instance - это полиморфная ассоциация.

Вы можете видеть, что когда parent_id установлен на странице, я делаю некоторую магическую проверку, чтобы увидеть, если она пуста, и если да, установите значение @parent_id равным nil, в противном случае я превращаю его в целое число и затем назначаю это относится к component_instance, который будет применять его по мере необходимости, когда вся комбинация page / component_instance будет сохранена в базе данных.

Мне пришлось сделать blank? nil : parent_id.to_i, потому что помощник селектора формы ожидает целое число и не работает со строковым значением для идентификатора.

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

1 Ответ

0 голосов
/ 15 ноября 2012

В итоге я делегировал настройку этих «виртуальных» атрибутов фактической модели, где они были «реальными»:

delegate :parent_id, :parent_id=, :to => :component_instance, :allow_nil => true

Сохраняет необходимость сначала вводить атрибут.

...