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

1 つのモデルのみを使用しながら、それぞれのルートを定義できるかどうかを尋ねていると思いますよね?

次の 2 つのオプションがあります。

まず、最も簡単な方法: ルートを 2 回定義するだけです。

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

ルート ファイルは、コメント モデルに 2 つの場所からアクセスできることを伝えても気にしません。基本的には期待どおりに機能します。ビューは「comments」フォルダーに存在するだけです。

2 つ目の、より複雑な方法として、ネストする名前空間を定義します。CommentsControllerとの 2 つのコントローラーができあがりますChairs::CommentsContoller。ビューのセットを 2 つ作成することもできますが、その必要はありません (2 番目のコントローラーは最初のコントローラーのビューを明示的にレンダリングできます)。

名前空間がどのように機能するかについての適切な説明については、私が最初に学んだ答えを参照してください。

アクセス方法に応じてモデルの表示方法を微調整できるため、この 2 番目のアプローチは優れていますが、DB にはまだ 1 つのモデルしかありません。

幸運を!コメントで質問にお答えします!

于 2011-04-01T05:05:11.550 に答える