如何.count current_level 6的实例?

时间:2015-05-31 02:22:43

标签: ruby-on-rails ruby methods

.count current_level6专门针对def current_level return 0 unless date_started def committed_wdays committed.map do |day| Date::ABBR_DAYNAMES.index(day.titleize) end end def n_days ((date_started.to_date)..Date.today).count do |date| committed_wdays.include? date.wday end - self.real_missed_days end case n_days when 0..9 1 when 10..24 2 when 25..44 3 when 45..69 4 when 70..99 5 else 6 #how can we count all the habits that are on this level? end end 。我应该如何在 habit.rb

中编写方法
calabash-android run appName.apk

然后我将在application_controller中调用该方法,以便我可以在侧边栏中使用该方法。

如果您需要进一步的代码或解释,请与我们联系。非常感谢你!

3 个答案:

答案 0 :(得分:1)

.count可以接受一个你想要计算的值的参数。所以,例如,如果你想要一个习惯列表,你就会在每个习惯上调用current_level:

>> levels = habits.map(&:current_level)
=> [5, 3, 1, 1, 1, 2, 6, 5, 4, 6]

你想要计算列表中6的数量,你可以这样做:

>> levels.count(6)
=> 2

此外,如果您想获得所有级别的计数:

>> Hash[*a.group_by(&:itself).flat_map{|k,v| [k, v.size]}]
=> {5=>2, 3=>1, 1=>3, 2=>1, 6=>2, 4=>1}

答案 1 :(得分:1)

假设Habit是一个模型,在habit.rb内,且Habit中的所有习惯属于一个用户,这应该适合您:

class Habit < ActiveRecord::Base
  # other methods ...
  # Since it's a class method, you call Habit.best_habits.
  def self.best_habits_count
      all.count { |habit| habit.current_level == 6 }
  end
  # other methods ...
end

如果他们属于不同的用户,则需要将其添加到user.rb中,例如:

class User < ActiveRecord::Base
  # other methods ...    
  # call : user.best_habits_count
  def best_habits_count
    habits.count { |habit| habit.current_level == 6 }
  end
  # other methods ...
end

更新

ActiveRecord :: Associations :: CollectionProxy有自己的count方法与Array#count不同,它不会占用一个块。因此,忽略给定的块,并且在没有任何参数的情况下调用时,simple返回集合中的记录数。

此处有更多信息:Ruby on Rails api上的ActiveRecord::Associations::CollectionProxy

所以解决方案就是用另一种方法来计算它们。

最终解决方案

输入 user.rb

  def count_mastered
    @res = habits.reduce(0) do |count, habit|
      habit.current_level == 6 ? count + 1 : count
    end
  end

答案 2 :(得分:1)

你需要做这样的事情:

  1. GET habit
  2. 的所有user
  3. 检查habit的{​​{1}} == 6
  4. 将其添加到current_level变量
  5. 如果你真的想使用.count方法:

    1. counter GET的所有habitcurrent_level并将其保存到user

    2. 对该阵列使用array 6

    3. 希望这会让你走上正确的道路:)