2016-10-18 6 views
0

私は他のモデルで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)は、Userモデル上、またはインスタンスにある1機能と2べきでしょうか?

2)function3はUserモデルまたはプロジェクトに存在する必要がありますか?

3)たとえば、プロジェクトに「個別の」スコープと、プロジェクトを呼び出す「ユーザー独自のプロジェクト」のスコープを記述できますか?

答えて

1

1)関数1と関数2は、Userモデル上か、インスタンス内にあるべきですか?事例で

- あなたはUserモデル上かプロジェクトに関数3であるべき

2)を返されるインスタンスの範囲を制限していますか?

プロジェクトも同様です。ユーザーはまだユーザーですが、返されるプロジェクトは制限されますので、プロジェクトの範囲です

3)たとえば、プロジェクトに「個別の」スコープと「ユーザー独自のプロジェクト」のスコープを書くことができますか?プロジェクトを呼び出す?

実際には、実際にはdistinct_projectsスコープをやり直す価値がない場合は、distinct_projectsスコープをもう一度別のスコープに再利用する可能性がある場合を除き、両方とも行うことができます。 )あなたが入力したものは保存されません;)

+0

ありがとうございました。私はfunction2で生成されたスコープから '.first'を削除しました – Gaston

関連する問題