我.count
current_level
时6
专门针对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中调用该方法,以便我可以在侧边栏中使用该方法。
如果您需要进一步的代码或解释,请与我们联系。非常感谢你!
答案 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)
你需要做这样的事情:
GET
habit
user
个
habit
的{{1}} == 6 current_level
变量如果你真的想使用.count方法:
counter
GET
的所有habit
。current_level
并将其保存到user
对该阵列使用array
6
希望这会让你走上正确的道路:)