6

我从 ActiveResource 开始,但很快就碰壁了。在底层模型上覆盖 to_json 和 to_xml 时无法使 ActiveResource 工作。另外,无法使资源表示将链接注入到生成的 xml 文档中。哦,顺便说一句,我使用的是 Rails 3.2.1。

我做了一些研究,发现了它的宝石。试过了,由于某种原因对我不起作用。所以我的问题是:

如果我有一个资源(比如书籍)托管在一个网站(例如http://books.org)中,另一个资源(比如学生,http://students.org)托管在另一个网站上,怎么能我得到书来向学生展示自己的 HATEOS 荣耀?

我能够让图书资源以 XML 文档的形式呈现给提问的学生。我通过在学生网站中使用 vanilla Rails ActiveResource 来做到这一点。我创建了继承自ActiveResource::Base. 然后我指定了self.siteand self.element_name,之后我能够对远程图书站点执行一些基本的 ActiveRecord 式查询。唯一对我有用的是Book.alland Book.find(1)。即使这样也不令人满意,因为该表示包含所有数据库列,我想至少删除其中的一些列,但事实证明这是不可能的。

现在我已经放弃了这种方法,我想知道 Rails 中是否有一个工作示例可以构建更复杂的资源(即书籍)表示,其中包含将驱动应用程序状态传输的链接?我发现这样一个简单的要求在 Rails 中实现起来如此困难,这简直令人难以置信。我要做的只是创建一个资源的表示,其中将包含一些链接,这些链接将指导消费者发现该资源的功能。我最感兴趣的是实现工作流,这是一个分层的、剥洋葱类型的发现对话过程。

4

1 回答 1

1

在 Rails 中,如果您希望在 JSON 中执行此操作,则需要更改对象序列化的方式。(您需要覆盖 Rails 回馈资源表示的方式。)这样做最常见的 gem 是: https ://github.com/rails-api/active_model_serializers

如果您不想使用 AMS 或想要返回 HTML,请考虑遵循此演示者模式:http: //blog.steveklabnik.com/posts/2012-01-06-implementing-hateoas-with-presenters

于 2015-02-05T15:51:30.297 回答