我有以下型号:
>帖子
>标签
> TaggedPost(Post和Tag通过has_many从…导出它们的关联)
而且我有以下的route.rb文件:
resources :tags resources :posts do resources :tags end
所以当我浏览到/ posts / 4 /标签时,这将使我在参数数组中设置了post_id值的标签控制器的索引动作.凉.
我的问题是,现在我正在访问帖子下的嵌套标签资源,是否应该点击标签控制器?或者我应该设置一些其他控制器来处理标签的嵌套本质?否则,我必须在标签控制器中构建额外的逻辑.这当然可以完成,但这是处理嵌套路由和资源的常用方法呢?标签控制器的索引操作中的代码如下:
TagsController.rb
def index if params[:post_id] && @post = Post.find_by_id(params[:post_id]) @tags = Post.find_by_id(params[:post_id]).tags else @tags = Tag.order(:name) end respond_to do |format| format.html format.json {render json: @tags.tokens(params[:q]) } end end
我可以看到这个控制器中的代码越来越大,因为我计划与标签资源相关联的许多额外的资源.关于如何打破这个想法?
问题总结:
>如果一个资源是嵌套的,嵌套资源是否应该通过代表资源嵌套性质的不同控制器?这是反对正常的控制器,因为我在我提供的代码示例.
>如果是这样,这些控制器应该如何命名和设置?
如果您需要更多信息,请告诉我们.
解决方法
所有您正在使用嵌套资源正在更改路由URL.您只需要做的就是确保将正确的id(在你的案例中)传递给标签控制器.最常见的错误是无法找到*** ID.
domain.com/user/1
domain.com/profile/2
当你把路线嵌套就可以了
domain.com/user/1/profile/2
这就是它正在做的一切.没有其他的.你不需要额外的控制器.嵌套路由只是为了看起来.允许您的用户遵循关联.嵌套路由最重要的是确保将link_to设置为正确的路径.
何时不嵌套:它将是user_path和profile_path
当嵌套时,您将需要使用user_profile_path.
耙子路线是您的朋友,以了解路线如何变化.
希望它有帮助.