ActiveResource: полиморфные маршруты - PullRequest
1 голос
/ 01 апреля 2011

Использование 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 голосов
/ 01 апреля 2011

Я думаю, вы спрашиваете, можете ли вы определить маршруты для каждого, используя только одну модель, верно?

Есть два варианта:

Во-первых, самый простой способ: просто определитьмаршрут дважды.

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

Файл маршрутов не будет заботиться о том, что вы говорите, что модель комментариев можно получить из двух мест, и она будет работать в основном так, как вы ожидаете - представления будут житьв папке 'comments'.

Второй, более сложный способ сделать это, определить пространство имен , в которое вы хотите вложить.Тогда вы получите два контроллера: CommentsController и Chairs::CommentsContoller.Вы также можете создать два набора представлений, но вам это не нужно (второй контроллер может просто явно отображать представления первого контроллера).

Для хорошего объяснения того, как будет работать пространство имен, вы можете увидеть ответ, в котором я изначально узнал об этом .

Этот второй подход хорош тем, что он стоит, потому что вы можете внести некоторые незначительные изменения в представление модели в зависимости от того, как к ней обращаются,но у вас все еще есть только одна модель в БД.

Удачи!Я буду рад ответить на вопросы в комментариях!

...