Rails:ActiveResource - 我可以明确设置ID吗?

时间:2009-03-02 12:35:12

标签: ruby-on-rails rest activeresource

我在Rails中使用ActiveResource来管理基于REST的单独数据库中的实体。

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

很遗憾,由于new?ActiveResource::Base的代码

,我无法使其正常工作
  def new?
    id.nil?
  end

save

 def save
   new? ? create : update
 end

因此,根据定义,无法设置资源的ID并将其另存为新资源。

createupdate是受保护的方法,所以如果我攻击ActiveResource :: Base代码可能会使它工作,但我不愿意这样做。

有没有正确的方法呢?或者我正在尝试做的只是坏事,我不应该这样做?

2 个答案:

答案 0 :(得分:4)

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

record = Model.new
record.id = 123
record.save!

答案 1 :(得分:2)

你正在反对ActiveResource的意图。 ActiveResource为REST Web服务提供了一个接口,按照惯例,在您进行创建时返回分配的ID。

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

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