在 Rails 个视图中使用自联接

Using Self joins in Rails views

我有一个用户 table,它也有一个经理的 ID 来实现自加入。当我以经理身份登录并单击 "My subordinates" 时,我应该会看到我的下属。下属也来自用户table。 所以我的问题是

  1. 这里应该说什么<%= link_to "My Subordinates", ???_path %>(我是说像user_path).
  2. 模型和控制器逻辑应该如何?

我建议命名空间 users_controller.rb

所以它会在文件夹 app/controllers/manager/users_controller.rb

class UsersController < ApplicationController
  before_action :ensure_manager!

  def index
    @manager.users
  end
end

routes.rb 中你会有这条路线:

namespace :manager do
  resources :users
end

所以最终你的路径是 manager_users_path

我会像@ryanfelton 说的那样做,但我不会覆盖索引方法,而是专门为下属创建一个新方法。

class Manager::UsersController < ApplicationController
    before_action :ensure_manager! #this one check the manager_id or any other condition to be manager

    def sobordinates
        @subordinates = @user.subordinates
    end

end

#routes.rb
namespace :manager do
    resources :users do
        collection do
            get :subordinates
        end
    end
end

这样就可以维护用户的索引,而且只有下属才有方法。

请注意,您需要在用户文件夹中创建一个 subordinates.html.erb > app/views/manager/users/subordinates.html.erb

编辑: 你在哪里要求模型和 link 也是如此,这里是:

link:编辑routes.rb后,进入控制台使用rake routes 并搜索下属 link。根据您对该路径的用途添加 _path 或 _url。

模型,我强烈建议你阅读关于关系的官方文档:http://guides.rubyonrails.org/association_basics.html。这比复制和粘贴的答案更有帮助:)