适当的范围放置

时间:2016-10-18 22:03:10

标签: ruby-on-rails model-associations

我有一个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)我可以在项目中编写一个“不同的”范围,以及一个“用户不同的项目”范围来调用项目吗?

1 个答案:

答案 0 :(得分:1)

1)功能1和2应该在用户模型上,还是在实例'?

在实例中 - 您正在限制返回的实例的范围

2)function3应该在用户模型上还是在项目中??

该项目 - 同样如上。用户仍然是用户,但您将限制返回哪些项目,因此它是项目范围

3)例如,我可以在项目上编写一个“不同的”范围,以及一个调用项目的“用户不同项目”范围吗?

是的,如果你真的想要,你可以做到这两点 - 在实践中,除非你可能在其他地方再次重用用户distinct_projects范围,否则它可能不值得用户distinct_projects范围(例如在另一个范围内)。它不会为您节省任何打字;)