首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在users_controller的每个方法中添加User.where(organisation_id: current_user.organisation_id)有没有替代的解决方案?

在users_controller的每个方法中添加User.where(organisation_id: current_user.organisation_id)的目的是为了筛选出与当前用户所属组织相关的用户数据。如果你想要避免在每个方法中重复添加这段代码,可以考虑以下替代的解决方案:

  1. 使用全局过滤器(before_action):在控制器中定义一个全局过滤器,该过滤器会在每个方法执行之前自动调用。在过滤器中添加User.where(organisation_id: current_user.organisation_id)的代码,这样就可以确保每个方法都会筛选出相关的用户数据。示例代码如下:
代码语言:txt
复制
class UsersController < ApplicationController
  before_action :filter_users_by_organisation

  def index
    # ...
  end

  def show
    # ...
  end

  # ...

  private

  def filter_users_by_organisation
    @users = User.where(organisation_id: current_user.organisation_id)
  end
end
  1. 使用模型关联(has_many):如果User模型与Organisation模型存在关联,可以在User模型中定义一个has_many关联,通过该关联可以直接获取与当前用户所属组织相关的用户数据。示例代码如下:
代码语言:txt
复制
class User < ApplicationRecord
  belongs_to :organisation

  # ...
end

class Organisation < ApplicationRecord
  has_many :users

  # ...
end

然后,在控制器中可以直接通过current_user.organisation.users来获取相关的用户数据。

  1. 使用作用域(scope):在User模型中定义一个作用域,该作用域会筛选出与当前用户所属组织相关的用户数据。然后,在控制器中可以直接调用该作用域来获取相关的用户数据。示例代码如下:
代码语言:txt
复制
class User < ApplicationRecord
  scope :by_organisation, ->(organisation_id) { where(organisation_id: organisation_id) }

  # ...
end

然后,在控制器中可以通过User.by_organisation(current_user.organisation_id)来获取相关的用户数据。

这些替代方案可以根据具体情况选择使用,以提高代码的可维护性和重用性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券