我还是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
从下面的课程中,我了解要获得program
,user
必须存在user_program_roles
。我的问题是,有没有办法可以获取所有程序而无需用户需要user_program_roles
(例如我Admin
,我希望看到所有程序)。什么是以轨道方式实现这一目标的最佳方式?
Update
在应用程序中,我可以使用current_user.programs
这样的内容,如果current_user
在user_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
答案 0 :(得分:0)
我想出了我想要的东西。所以我最终使用alias_method
,并将其设置为
alias_method :user_programs, :programs
def programs
return self.user_programs unless admin?
Program.all
end
我想知道,如果ActiveRecord功能有副作用吗?