1

使用 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")

请阻止我这样做。

4

1 回答 1

0

我想你是在问你是否可以在只使用一个模型时为每个定义路线,对吧?

有两种选择:

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

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

路由文件不在乎你是否告诉它评论模型可以从两个地方访问,它基本上会按你​​的预期工作——视图只会存在于“评论”文件夹中。

第二种更复杂的方法是定义要嵌套在其下的命名空间。然后你会得到两个控制器:CommentsControllerChairs::CommentsContoller. 您也可以创建两组视图,但您不必这样做(第二个控制器可以简单地显式呈现第一个控制器的视图)。

有关命名空间如何工作的一个很好的解释,您可以查看我最初了解它的答案

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

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

于 2011-04-01T05:05:11.550 回答