Ruby on rails 添加非标准视图和控制器操作的最佳实践?

Ruby on rails 添加非标准视图和控制器操作的最佳实践?,ruby-on-rails,view,controller,routes,ruby-2.0,Ruby On Rails,View,Controller,Routes,Ruby 2.0,我的情况是,我有一个“家长”模型和控制器。我想知道为用户添加独立页面(如仪表板)的最佳实践。我的想法是,我可以创建一个视图dashboard.html.erb,并在父控制器内创建一个方法: 父控制器 def dashboard end Routes.rb get 'parents/dashboard' 我做过一次,效果很好,但这是一个“儿童”模型 当我在父模型中运行相同的情况时,我得到了错误 ActiveRecord::在ParentsController#show中找不到RecordNo

我的情况是,我有一个“家长”模型和控制器。我想知道为用户添加独立页面(如仪表板)的最佳实践。我的想法是,我可以创建一个视图
dashboard.html.erb
,并在父控制器内创建一个方法:

父控制器

def dashboard 
end
Routes.rb

get 'parents/dashboard'
我做过一次,效果很好,但这是一个“儿童”模型

当我在父模型中运行相同的情况时,我得到了错误

ActiveRecord::在ParentsController#show中找不到RecordNot

找不到“id”=仪表板的父级

1。)我所做的只是添加一个视图,将仪表板模型添加到控制器中,并将
get'parents/dashboard'
放入routes.rb中,它尝试引用show方法???为什么?


2。)这是向rails应用程序添加页面/操作的错误方法吗?

如果要添加带有
:id
的额外路由,则语法不同

get 'parent_dashboard/:id', to: 'parents#dashboard'
注意,get之后的person字符串。这被用作网站的地址,当用户点击它时,如果它是第一个仪表板,它将转到
localhost:3000/parent\u dashboard/1
。如果愿意,可以排除
:id
。当然,这与用例不同

路由语法的第二部分是
:to
,此方法告诉应用程序要查看哪个控制器和方法

希望这有帮助

这样做:

#config/routes.rb
resources :parents do
   get :dashboard, on: :collection #-> url.com/parents/dashboard
end

这是向rails应用程序添加页面/操作的错误方法吗

这不是“错”,只是无效,正如你的问题所证明的那样

您遇到的问题是,您在
参考资料:家长
路线下面包含了自定义路线。由于创建了一个
/:id
url,该url捕获发送到
家长/:id
的任何请求,因此您的“仪表板”请求将被发送到家长控制器的
显示
操作:

您的问题有两种解决方法:

  • get'parents/dashboard'
    放在
    resources:parents
    指令上方
  • 包括一个到
    资源:父级
    (以上)
  • 您必须记住,Rails将您的请求与路由匹配。这意味着将处理与您的请求匹配的第一条路由

    所以如果你有

    #config/routes.rb
    resources :parents
    get "parents/dashboard"
    
    。。。Rails将假定
    仪表板
    url.com/parents/:id
    中的
    :id
    ,从而将请求发送到
    show

    除了顶级代码(推荐答案)外,您还可以拥有以下内容:

    #config/routes.rb
    get "parents/dashboard", to: :dashboard
    resources :parents
    

    如果要将新视图添加到父文件夹中。只要这样做:

    parents_controller.rb
    
    def dashboard
      @parent = Parent.find(params[:id])
    end
    
    routes.rb
    get '/parents/:id/dashboard', to: 'parents#dashboard', as: :parents_dashboards
    resources :parents
    
    然后在您的
    parents/dashboard.html.erb
    视图中,您可以执行在parents/show视图中可以执行的所有操作

    指向仪表板视图的链接将是
    parents\u dashboards\u path
    ,在某些情况下,您可能必须使用
    parents\u dashboards\u path(@parent)
    parents\u dashboards\u path(parent)

    这是一个自定义路径的示例,它不使用嵌套资源来完成对父级仪表板的访问


    我正在一个项目中使用这种方法,所以我想听听对这种方法的任何批评或评论。和平,我要离开这里

    我会生成一个仪表板控制器,我想这会更快。新的足够多,我不确定是否太多的控制器会减慢应用程序的速度。我工作过的所有带有仪表板的rails应用程序都有一个仪表板控制器。。。