这应该很简单。我不确定如何标题这个问题。我有一组可以添加到我的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或整数,具体取决于它是否存在?
答案 0 :(得分:0)
我最终将这些“虚拟”属性的设置委托给他们“真实”的实际模型:
delegate :parent_id, :parent_id=, :to => :component_instance, :allow_nil => true
首先需要对属性进行类型转换。