我有一个facade类,它在其他模型上执行SQL查询。我想使用范围,但我怀疑在哪里实现它们,以及它们是否比仅使用普通方法更好。我也很关心良好的编程习惯。
首先,这是我的模特
class User < ActiveRecord::Base
has_many :projects
class Project < ActiveRecord::Base
belongs_to :User
has_many :tasks, :inverse_of => :project
class Task < ActiveRecord::Base
belongs_to :project, :inverse_of => :tasks
has_many :instances
class Instance < ActiveRecord::Base
belongs_to :task
门面课程:
def Function1(param)
@var = @user.instances.where("...", param).order(:start_time).group_by { |x| x.method}
end
def Function2
@var = @user.instances.where("...").first
end
def Function3
@var = @user.projects.distinct
end
1)功能1和2应该在用户模型上,还是在实例'?
中2)function3应该在用户模型上还是在项目中??
3)我可以在项目中编写一个“不同的”范围,以及一个“用户不同的项目”范围来调用项目吗?
答案 0 :(得分:1)
1)功能1和2应该在用户模型上,还是在实例'?
中在实例中 - 您正在限制返回的实例的范围
2)function3应该在用户模型上还是在项目中??
该项目 - 同样如上。用户仍然是用户,但您将限制返回哪些项目,因此它是项目范围
3)例如,我可以在项目上编写一个“不同的”范围,以及一个调用项目的“用户不同项目”范围吗?
是的,如果你真的想要,你可以做到这两点 - 在实践中,除非你可能在其他地方再次重用用户distinct_projects
范围,否则它可能不值得用户distinct_projects
范围(例如在另一个范围内)。它不会为您节省任何打字;)