6

我在 Rails 中使用 ActiveResource 通过 REST 管理单独数据库中的实体。

我一直在尝试显式管理远程资源的 ID,就当前情况而言,最简单的方法是重新使用本地资源的 ID,而不是维护不同的字段。

不幸的是,我无法使其正常工作,因为new?in的代码ActiveResource::Base

  def new?
    id.nil?
  end

并且save

 def save
   new? ? create : update
 end

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

create并且update是受保护的方法,所以如果我破解了 ActiveResource::Base 代码,也许这会让它工作,但我不愿意这样做。

有这样做的正确方法吗?还是我想做的事情很糟糕,我不应该这样做?

4

2 回答 2

4

在新的 rails(测试 2.3.2)中,可以设置 id,因为保存逻辑发生了一些变化(现在记录有布尔字段 @newrecord 来消除那个 id.nil?)。

record = Model.new
record.id = 123
record.save!
于 2009-09-22T09:44:53.677 回答
2

您正在违背 ActiveResource 的意图。ActiveResource 为 REST Web 服务提供了一个接口,按照惯例,它会在您创建时返回分配的 ID。

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

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

于 2009-03-02T20:09:49.130 回答