我在rails数据库中有一个关系,我得到了一个关系实例。然后我需要确定填充了多少实例。我通过计算关系中的nils来做到这一点,但我不知道如何通过代码执行此操作。我知道.each循环,但这使我说明字段,我需要更像数组的东西。这就是我到目前为止所拥有的
@survey_data = Surveyprofile.find_by(:user_id => @user.user_id)
@counter = 0
@index = 0
@survey_data.each do |d|
//i need something like
if d[index].nil? == false
@counter = @counter +1
end
@index++
end
有谁知道如何表达这个? (顺便说一句,这都是在控制器中完成的)
答案 0 :(得分:0)
我没有测试过这种方法,但它应该可行。
<强> survey_profile.rb:强>
class SurveyProfile < ActiveRecord::Base
def self.number_of_empty_answers(user_id)
user_survey = SurveyProfile.find_by_user_id(user_id)
count = 0
user_survey.attributes.each do |attr_name, attr_value|
count += 1 if attr_value.nil?
end
return count
end
<强> survey_profiles_controller.rb:强>
SurveyProfile.number_of_empty_answers(@user.id)
类方法number_of_empty_answers
计算用户未填写的答案。然后从控制器中调用该方法。
请注意,它不必是类方法。它也可以是实例方法。您可以先在控制器中找到实例,然后在其上调用方法。
由于您正在遍历属性哈希,因此可以获得更多花哨并构建一个非空的字段名称数组。但如果你只是想要计数,上面应该有效。