针对特定用户的自定义ActiveRecord查询(例如管理员)

时间:2017-09-17 11:33:54

标签: ruby-on-rails ruby activerecord

我还是Ruby的新手,特别是Rails,还是学习如何以轨道方式正确地做事。 所以我有User类,如下所示

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable

  validates :email, presence: true, email: true

  has_many :user_program_roles, dependent: :destroy
  has_many :programs, through: :user_program_roles
  has_many :user_answers
  has_many :homework_students
  ...
  ...
end

从下面的课程中,我了解要获得programuser必须存在user_program_roles。我的问题是,有没有办法可以获取所有程序而无需用户需要user_program_roles(例如我Admin,我希望看到所有程序)。什么是以轨道方式实现这一目标的最佳方式?

Update

在应用程序中,我可以使用current_user.programs这样的内容,如果current_useruser_program_roles中有记录,它会获取所有程序。我可以达到类似的目的,我不知道我是否可以在ruby中做这样的事情(在User类内)

def programs
  if admin?
    Program.all # return all program if this user is admin
  else
    programs # return only program that this user has role in it
  end
end

1 个答案:

答案 0 :(得分:0)

我想出了我想要的东西。所以我最终使用alias_method,并将其设置为

alias_method :user_programs, :programs

def programs
  return self.user_programs unless admin?
  Program.all
end

我想知道,如果ActiveRecord功能有副作用吗?