代码之家  ›  专栏  ›  技术社区  ›  tardate

如何让ar_fixture加载受保护的属性?

  •  0
  • tardate  · 技术社区  · 15 年前

    我在用 ar_fixtures 在Rails项目中输入数据(该过程是在seed在2.3.4中到达之前编写的)

    这一切都很好,除了我发现有一列没有被填充(user_id)。用户ID在yaml文件中设置,例如:

    - !ruby/object:Service 
      attributes: 
        name: name
        updated_at: 2009-10-14 11:50:36
        provider_id: "1"
        id: "1"
        description: ""
        user_id: "1"
        created_at: 2009-10-14 11:47:01
      attributes_cache: {}
    

    但即使在运行导入(service.load_from_file)时存在相关的用户对象,导入后的用户ID也是零。其他外键(如上面示例中的provider_id)已正确加载。

    我怀疑这是因为用户ID在模型中受到保护,并且在批量分配期间会被阻止。

    有人知道情况是否如此,如果是这样,如何绕过大规模任务保护?当然,我希望在运行时为应用程序保留批量分配保护。

    1 回复  |  直到 15 年前
        1
  •  2
  •   tardate    15 年前

    固定的!回答我自己的问题……

    只需要在加载之前调整attr_protected/attr_accessible设置。例如

    Service.attr_protected.delete "user_id"
    Service.load_from_file
    

    或者,如果限制基于ATTR_可访问性:

    Service.attr_accessible :user_id
    Service.load_from_file