私はRails 3.1.xアプリに取り組んでおり、次のモデルのセットがあります:
class Widget
include Mongoid::Document
field :name
embeds_many :comments
end
class ShinyWidget < Widget; end
class DullWidget < Widget; end
class Comment
include Mongoid::Document
field :message
embedded_in :widget
end
したがって、基本的には、コメントをさまざまなタイプのウィジェットに関連付けることができるようにする必要があります。次のようなルートで標準リソースを使用します。
resources: widgets do
resources :comments
end
GET /widgets
、などの URL を公開GET /widgets/:widget_id/comments
します。しかし、さまざまな種類のウィジェットにコメントを追加するための API を公開したいと思います。これらの API URL を次のようにしたいと思います。
GET /shinywidgets/:widget_id/comments
POST /shinywidgets/:widget_id/comments
ただし、ShinyWidgetsController と DullWidgetsController は問題ありませんが、CommentsController は 1 つだけ作成したいと考えています。さまざまなタイプのウィジェットのコメントを処理する単一の CommentsController を持つ良い方法を考えていなかったので、これを試しました:
resources :widgets do
get 'comments', to: 'widgets#comments_index'
post 'comments', to: 'widgets#comments_create'
end
/widgets/:widget_id/comments に POST を実行すると、ハッシュは、私が望んでいたものではなく、params
という名前のキーに投稿されているコメント データを格納します。widget
comment
使用されたRailsがハッシュresources :comments
内のそのキーを に変更するかどうかはわかっていますが、現在のセットアップでそのキーの名前をRailsに伝えることはできますか?params
comment
現在、次のようなコメントを作成する必要があります。
def comments_create
widget = Widget.find(params.delete :widget_id)
comment = widget.comments.create(params[:widget])
end
私は本当にしたいです:
comment = widget.comments.create(params[:comment])
何かご意見は?