ActiveResource:多态路由

时间:2011-04-01 04:50:38

标签: ruby-on-rails ruby prefix activeresource polymorphism

使用ActiveResource,Ruby on Rails,有一种干净的方法来执行以下操作:

我有自己的ActiveResource模型并主持ActiveResource模型,两者都有评论。我想重用两个注释ActiveResource模型。

# ActiveResource wraps HTTP POST Requests to the following
# And then parsess the responses, and then creates instances of my ActiveResource models
POST http://3rd.party.restful.api.com/admin/houses/1/comments
POST http://3rd.party.restful.api.com/admin/houses/1/chairs/3/comments

我只能想到以下几点:

class Comment < ActiveResource::Base
  self.site = "http://3rd.party.restful.api.com"
  self.prefix = "/admin/:prefix_path/"
end

然后执行以下操作:

comment = Comment.new(:text => "some text", :prefix_path => "houses/1/chairs/3")

请阻止我这样做。

1 个答案:

答案 0 :(得分:0)

我想你问的是,你是否可以只使用一个型号来定义每个路线,对吗?

有两种选择:

首先,最简单的方法:只需定义路线两次。

resources :houses do
  resources :comments
  resources :chairs do
     resources :comments
  end
end

路径文件并不关心你是否告诉它可以从两个地方到达评论模型,它将基本上按照你的预期工作 - 视图将只存在于'comments'文件夹中。

第二种更复杂的方法是定义你想要嵌套的namespace。然后你最终会得到两个控制器:CommentsControllerChairs::CommentsContoller。您可能还会创建两组视图,但您不必(第二个控制器可以简单地显式呈现第一个控制器的视图)。

有关命名空间如何工作的详细说明,您可以看到the answer where I originally learned about it

对于它的价值,第二种方法很好,因为你可以根据访问方式对模型的呈现方式进行一些小的调整,但是你仍然只在数据库中有一个模型。

祝你好运!我很乐意尝试在评论中回答问题!