0

这应该是一件容易的事。我不确定如何为这个问题命名。我有一组可以添加到我的 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 将在整个页面/component_instance 组合保存到数据库时根据需要应用它。

我不得不这样做,blank? nil : parent_id.to_i因为表单选择器助手需要一个整数并且不能使用 id 的字符串值。

问题是,我这样做是否正确,或者是否有更好的方法将字符串 id 转换为 nil 或整数,具体取决于它是否存在?

4

1 回答 1

0

我最终将这些“虚拟”属性的设置委托给它们“真实”的实际模型:

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

无需先对属性进行类型转换。

于 2012-11-15T03:15:58.947 回答