如何在Rails应用程序中使用ActiveResource

时间:2011-08-05 09:21:21

标签: ruby-on-rails

我有Rails应用程序(Redmine),我创建了下一个关闭问题的工作代码:

require 'active_resource'

class Issue < ActiveResource::Base
  self.site = "https://user@secret@esupport.some.com"
end

issue = Issue.find(7415)
issue.status_id = 5
issue.save

现在我想把这段代码放到Rails插件中。但是如果我将类的定义放到Rails-plugins中,我会得到下一条错误消息:

  

TypeError(类问题的超类不匹配):

我知道错误的原因--Rails应用程序有一个模型问题,但我不知道如何解决它。

如果我将类别定义更改为

class **OtherIssue** < ActiveResource::Base
  self.site = "https://user@secret@esupport.some.com"
end

ActiveResource不知道如何将我的类链接到Rails模型。

1 个答案:

答案 0 :(得分:2)

使用ActiveResource时很容易忘记使用xml 如果你有

class SomeOtherIssue < ActiveResource::Base
  self.site = "https://support.some.com"
  self.element_name = "site"
  self.user = "someone"
  self.password = "secret"
end

some_other_issue = SomeOtherIssue.find(7415)
some_other_issue.status_id = 5
some_other_issue.save

然后您将数据保存在网站上。如果您想在本地保存Issue模型上的数据,则必须找到本地Issue记录并为其分配some_other_issue值

更新以回复评论

使用self.element_name =远程站点上的某个路径 e.g。

self.element_name = 'my_model'将导航至

https://support.some.com/some_model

所以当你调用some_other_issue = SomeOtherIssue.find(7415)时,你将导航到my_model控制器上的show动作并传入7415作为id参数。因为您的远程站点将使用RESTfull路由(我希望),您将在my_model / show操作中获取xml响应而不是html响应。

在您的情况下,您应该设置self.element_name = "issue"。 希望更清楚。

http://api.rubyonrails.org/classes/ActiveResource/Base.html会为您提供此

的示例