0

テーブル:

User

Project has_many Results

Project has_many Data through ProjectData

Results belongs_to data, project

Resultテーブルには、int型の列が:positionあります。

だから私は、実際には の値ですべてresultsを取得したいと思います。level < 50count

私はResultクラスに追加することを考えています

 def get_top_level current_user
   tsum = []
   Project.where(user_id: current_user).each do |project|
     tsum << project.results.where("level <= ?", 50).count
   end
   return sum(tsum)
 end

これは機能しますが、これを行うための簡単できれいな方法があるはずです。

また、ビューでクラス名を使用して、たとえば次のように異なる値を渡しても問題ありません。

<%=Results.get_top_level(current_user)%>

または

<%=@results.get_top_level(current_user)%>

これらのどれもが良い方法でない場合は、これに対する代替ソリューションを教えてください。

ありがとうございました。

4

1 に答える 1

1

このようなプロジェクトモデルでメソッドを作成します。

def get_top_level
  self.results.select{ |result| result.level <= 50 }
end

ユーザーモデルについて。ここでの関係は何ですか?ユーザーは多くのプロジェクトを持っていますか? または、1 つのプロジェクトのみ。

def get_top_level 
  self.top_level_projects.inject(:+)
end

def top_level_projects
  self.projects.map(&:get_top_level)
end

current_user.get_top_level を呼び出すと、これにより top_level_projects が検出され、関連する結果がマップされ、それらがすべて一緒に追加されます。

于 2013-11-12T19:19:08.820 に答える