【问题标题】:How to store an id in a model class如何在模型类中存储 id
【发布时间】:2010-07-27 22:50:50
【问题描述】:

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

【问题讨论】:

  • 为什么你的 parent_id 会是一个字符串?这里没有加起来。
  • 因为它来自 params 哈希。 params 中的所有内容都作为字符串传递不是吗?

标签: ruby-on-rails custom-attributes


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-22
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    相关资源
    最近更新 更多