我有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模型。
答案 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会为您提供此
的示例