在Rails视图中使用自联接

时间:2015-12-03 15:35:08

标签: ruby-on-rails self-join

我有一个Users表,它还有一个管理员ID来实现自我加入。当我作为经理登录并点击"我的下属"时,我应该看到我的下属。下属也来自User表。 所以我的问题是

  1. 我应该在这里说什么<%= link_to"我的下属",???? _ path%>(我的意思是像user_path。)。
  2. 模型和控制器逻辑应该如何?

2 个答案:

答案 0 :(得分:0)

我建议namspacing thisObj

所以它会在文件夹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

答案 1 :(得分:0)

我会像@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

通过这种方式,您可以维护用户的索引,并且只有下属使用方法。

请注意,您需要在users文件夹&gt;中创建subordinates.html.erb。 app/views/manager/users/subordinates.html.erb

编辑: 你在那里要求模型和链接也是如此,在这里:

链接:编辑routes.rb后,转到控制台并使用rake routes 并搜索下属链接。添加_path或_url,具体取决于您对该路径的使用情况。

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