仪表板命名空间的 Rails 路由帮助

Posted

技术标签:

【中文标题】仪表板命名空间的 Rails 路由帮助【英文标题】:Rails Routing Help for Dashboard Namespace 【发布时间】:2018-05-24 11:02:31 【问题描述】:

我认为我已经正确设置了所有内容,但是当我尝试访问dashboards_posts_path 时,它会指向dashboard_path 视图而不是app>views>dashboards>posts#index 视图。我不明白为什么。

router

namespace :dashboards do
 resources :posts
 resources :tags
 resources :ingredients
 resources :comments
 resources :pages
 resources :users
end

controller

class Dashboards::PostsController < DashboardsController
 # before_action :admin_authorize, only: [:new, :create, :edit, :update, :destroy]
 protect_from_forgery with: :null_session
 layout "dashboards"

 def current_user
  if session[:user_id]
   @current_user = User.find(session[:user_id])
  end
 end

 def index
  @posts = Post.newest.paginate(page: params[:page], per_page: 3)
  @all_posts = Post.all
 end
end

views

routes

log

【问题讨论】:

你能显示日志,特别是 GET 请求吗?因为我有一种感觉 dashoards_posts_path 实际上正在重定向到 dashboards_path。即,如果您的 ApplicationController 中有一些 before_action 进行一些重定向;即授权 在“日志”下添加了照片,它肯定会重定向,我就是不明白为什么?我不明白为什么它由仪表板控制器而不是仪表板/帖子控制器处理。 解决了!非常感谢!! 另外,请记住发布代码,而不是图片。如果您发布图片,我们无法复制和粘贴以显示可能存在问题的位置。 顺便说一句,您的日志图像中没有重定向。 【参考方案1】:

您的问题是您在所有 namespace :dashboards 东西之前定义了 resources :dashboard(我在推测)。请记住,路线从上到下解析。因此,路由将GET dashboards/posts 解析为dashboards/:id,这就是为什么您使用idposts 路由到DashboardsController#show

你为什么不试试:

resources :dashboards do
  resources :posts
  resources :tags
  resources :ingredients
  resources :comments
  resources :pages
  resources :users
end

应该正确解决。

或者,把resources :dashboards 放在你的命名空间的东西之后,像这样:

namespace :dashboards do
  resources :posts
  resources :tags
  resources :ingredients
  resources :comments
  resources :pages
  resources :users
end

resources :dashboards

【讨论】:

它不会让我点赞你,因为我还是个新手,但你已经在我心中被点赞了!

以上是关于仪表板命名空间的 Rails 路由帮助的主要内容,如果未能解决你的问题,请参考以下文章

嵌套命名空间路由到错误的控制器

Rails 方式 - 命名空间

Rails 中的命名空间模型:联合的状态是啥?

如何避免 Rails 脚手架将模型放入命名空间

如何在rails的命名空间内生成控制器

Rails 模块作为严格的命名空间