ruby-on-rails-3 – Rails嵌套资源和路由 – 如何分解控制器?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails-3 – Rails嵌套资源和路由 – 如何分解控制器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下型号:

>帖子
>标签
> 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.

耙子路线是您的朋友,以了解路线如何变化.

希望它有帮助.

猜你在找的Ruby相关文章