我正在开发 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
这会公开诸如 、 等的 url GET /widgets
。GET /widgets/:widget_id/comments
但是,我想公开一个 API,用于向不同类型的小部件添加评论。我希望这些 API URL 看起来像:
GET /shinywidgets/:widget_id/comments
POST /shinywidgets/:widget_id/comments
但是,我可以拥有一个 ShinyWidgetsController 和一个 DullWidgetsController,但我只想创建一个 CommentsController。由于我还没有想到让一个 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])
有什么想法吗?