在 Rails 个视图中使用自联接
Using Self joins in Rails views
我有一个用户 table,它也有一个经理的 ID 来实现自加入。当我以经理身份登录并单击 "My subordinates" 时,我应该会看到我的下属。下属也来自用户table。
所以我的问题是
- 这里应该说什么<%= link_to "My Subordinates", ???_path %>(我是说像user_path).
- 模型和控制器逻辑应该如何?
我建议命名空间 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。这比复制和粘贴的答案更有帮助:)
我有一个用户 table,它也有一个经理的 ID 来实现自加入。当我以经理身份登录并单击 "My subordinates" 时,我应该会看到我的下属。下属也来自用户table。 所以我的问题是
- 这里应该说什么<%= link_to "My Subordinates", ???_path %>(我是说像user_path).
- 模型和控制器逻辑应该如何?
我建议命名空间 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。这比复制和粘贴的答案更有帮助:)