Ruby on rails 如何管理rails中的嵌套路由和控制器?

Ruby on rails 如何管理rails中的嵌套路由和控制器?,ruby-on-rails,ruby,rest,controller,routes,Ruby On Rails,Ruby,Rest,Controller,Routes,我们有多种模式,包括帖子、博客、维基和评论 在注释表中,我们维护对象类型、对象id和注释类型 注释表数据 要处理这个问题,我的路由应该是什么样子,我应该创建多少个控制器来处理不同的注释类型 关于这一点: /post/1/comments/:注释类型 如中所示嵌套资源: resources :posts do resources :comments end 给你: post_comment_path GET /posts/:post_id/comments/:id(.:form

我们有多种模式,包括帖子、博客、维基和评论

在注释表中,我们维护对象类型、对象id和注释类型

注释表数据 要处理这个问题,我的路由应该是什么样子,我应该创建多少个控制器来处理不同的注释类型

关于这一点: /post/1/comments/:注释类型

如中所示嵌套资源:

resources :posts do
  resources :comments
end
给你:

post_comment_path    GET     /posts/:post_id/comments/:id(.:format)  comments#show
您可以对其他资源执行相同的操作

更新:

例如,关于选择注释类型,处理它的一种方法是创建一个单独的模型

class Comment
  has_and_belongs_to_many :comment_types
end

class CommentType
  has_and_belongs_to_many :comments
end
如果您使用的是simple_表单,在新的.html.erb表单中,您将执行以下操作:

<%= f.association :comment_types %>
这将为您提供一个下拉列表来选择注释类型。您可以在控制台中创建注释类型。假设您只有:系统和用户注释类型。只需在控制台中创建它们,它们都会显示在下拉列表中供您选择


如果采用这种方法,则不需要将资源嵌套在routes.rb文件中

您可以从url获取父模型:

before_filter :get_commentable

def create
  @comment = @commentable.comments.create(comment_params)
  respond_with @comment
end

private

def get_commentable
  resource, id = request.path.split('/')[1,2]
  @commentable = resource.pluralize.classify.constantize.find(id)
end

您希望将评论与哪个模型帖子、博客、维基相关联?您是否在寻找像/:object\u type/:object\u id/comments/:comment\u type这样的路由,并将它们作为/:object\u type/:object\u id/comments/:comment\u type/:id和/:object\u type/:object\u id/comments/:comment\u type/edit/:id等进行RESTfully处理?@engineersmnky ok。但是我如何生成这种类型的路由呢?我如何在控制器中处理这些请求?我需要生成多个控制器吗?很好的问题Kunal+1好的,我应该如何在控制器内处理此问题?如何在控制器中获取“对象类型”、“对象id”和“注释类型”?为什么不使用:id获取?例如,如果您获取id=1的注释,那么不应该提供与该注释相关的所有相关数据吗?比如object_type、object_id和comment_type。但是,在创建时,我如何知道应该创建什么类型的注释以及为哪个对象创建注释呢?我想在新的.html.erb表单中,您可以选择属性:object_type和comment_type。还不确定。请参阅更新的答案。让我知道它是否对您有意义如何为不同的模型生成这种类型的路由“/:object\u type/:object\u id/comments/:comment\u type/:id”?您可以在路由文件上自定义生成它。获取“/:object\u type/:object\u id/comments/:id”,:to=>“controller\u nameaction\u name”我对url不是很确定。你能使用restful路由吗?如果你的评论类型只有两种,你可以用两种方式处理它,/wiki/1/comments/user user是对集合或发送参数的自定义操作/wiki/1/commnets?type=users我们有四种不同类型的注释和7到8种支持注释的模型。可能有控制器处理所有类型的注释并将其作为参数发送到索引操作
before_filter :get_commentable

def create
  @comment = @commentable.comments.create(comment_params)
  respond_with @comment
end

private

def get_commentable
  resource, id = request.path.split('/')[1,2]
  @commentable = resource.pluralize.classify.constantize.find(id)
end