需要像数组一样遍历rails数据库的实例

时间:2014-06-09 01:30:20

标签: ruby-on-rails

我在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

有谁知道如何表达这个? (顺便说一句,这都是在控制器中完成的)

1 个答案:

答案 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计算用户未填写的答案。然后从控制器中调用该方法。

请注意,它不必是类方法。它也可以是实例方法。您可以先在控制器中找到实例,然后在其上调用方法。

由于您正在遍历属性哈希,因此可以获得更多花哨并构建一个非空的字段名称数组。但如果你只是想要计数,上面应该有效。