Ruby on rails 如何迭代模型,然后在视图中再次迭代?

Ruby on rails 如何迭代模型,然后在视图中再次迭代?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我想为我的每个用户提取数据。我从我的用户表中获取他们的person\u id,然后使用每个人的id来计算每个人的可用天数,并在我的视图中显示出来。 我不确定我是否做得正确,因为我在控制器中迭代,然后在视图中再次迭代 def how_many_days_users_have @my_group = User.all.pluck(:person_id) @my_group.each do |v| @indirect_id_v = Empaccrl.where("person_id =

我想为我的每个用户提取数据。我从我的用户表中获取他们的
person\u id
,然后使用每个人的id来计算每个人的可用天数,并在我的视图中显示出来。 我不确定我是否做得正确,因为我在控制器中迭代,然后在视图中再次迭代

def how_many_days_users_have

 @my_group = User.all.pluck(:person_id)
 @my_group.each do |v|

   @indirect_id_v = Empaccrl.where("person_id = ? and is_active = ?", '#{v]', 'Y').pluck(:a_code).first
   @v_range = Empaccrl.where("person_id = ? and is_active = ?", '#{v]', 'Y').pluck(:ac).first
   @v_range_taken = Empaccrl.where("person_id = ? and is_active = ?", '#{v]', 'Y').pluck(:taken).first
   @total_v_hours = @v_range.to_d - @v_range_taken.to_d
   @total_v_days = @total_v_hours / 8

 end
然后在我看来,我用这个来显示这些数据:

  %tr.trace-table
  -@indirect_id_v.each do |idd|
    %tr.trace-table
      %td.trace-table{:style => 'border: solid black;'}= idd



  -@total_v_days.each do |days|
    %tr.trace-table
      %td.trace-table{:style => 'border: solid black;'}= days

好的,首先,把一些垃圾移到你的模型上,像这样:

class Empaccrl < ActiveRecord::Base

  def self.all_people
    where(person_id: User.all.pluck(:person_id))
  end

  def self.active_people
    all_people.where(is_active: 'Y')
  end

  def self.active_vacation_data
    active_people.select(:person_id, :ac, :taken)
  end 

  def total_v_hours
    ac.to_d - taken.to_d
  end

  def total_v_days
    total_v_hours / 8
  end
end
老实说,你甚至不需要所有这些,但我不知道你为什么要做你正在做的事情,所以我想最好是安全的,并添加一些东西。不管你不需要什么,就忽略吧

peoples_vacation_information = Empaccrl.active_vacation_data.all 
peoples_vacation_information.map do |person| 
  p "person #{person.person_id} has #{person.total_v_days} vacation days"
end