如何在模型类中存储id

时间:2010-07-27 22:50:50

标签: ruby-on-rails custom-attributes

这应该很简单。我不确定如何标题这个问题。我有一组可以添加到我的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或整数,具体取决于它是否存在?

1 个答案:

答案 0 :(得分:0)

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

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

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