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

Rails:ActiveResource-我可以显式设置ID吗?

  •  6
  • DanSingerman  · 技术社区  · 17 年前

    我在Rails中使用ActiveResource来管理独立数据库中的实体,而不是REST。

    不幸的是,我无法将其作为 new? 在里面 ActiveResource::Base 是

      def new?
        id.nil?
      end
    

    save

     def save
       new? ? create : update
     end
    

    因此,根据定义,不可能设置资源的ID并将其保存为新资源。

    create 和 update 都是受保护的方法,所以如果我黑了ActiveResource::Base代码,也许这会使它工作,但我不愿意这样做。

    有没有正确的方法?或者我想做的只是坏事,我不应该做?

    2 回复  |  直到 17 年前
        1
  •  4
  •   Vasfed SAJITHA MARIYAM    17 年前

    在新的rails(tested 2.3.2)中,可以设置id,因为保存逻辑已经改变了一点(现在记录有布尔字段@newrecord来消除id.nil?)。

    record = Model.new
    record.id = 123
    record.save!
    
        2
  •  2
  •   Sarah Mei    17 年前

    也就是说,如果您控制正在使用的资源,并且在保存新记录时修改了其行为以获取ID,则可以修改ActiveResource::Base以符合要求。Rails中的人们对基类进行添加和更改的情况并不少见;您只需将补丁放在lib中,并将其包含在您的启动文档中。

    我认为这不一定是个好主意,但这是可能的