2015-10-26 3 views
2

Я хочу извлечь данные для каждого из моих пользователей. Я хватаю их person_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 
    [email protected]_id_v.each do |idd| 
    %tr.trace-table 
     %td.trace-table{:style => 'border: solid black;'}= idd 



    [email protected]_v_days.each do |days| 
    %tr.trace-table 
     %td.trace-table{:style => 'border: solid black;'}= days 

ответ

1

Хорошо, первые вещи первой, переместить некоторые из этой нежелательной модели, например, так:

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 

Hon что вам даже не нужно все это, но я не уверен, почему вы делаете то, что делаете, поэтому я решил, что лучше быть в безопасности и добавлять вещи. Независимо от того, что вам не нужно, просто игнорируйте.

+0

Большое спасибо, что сделал трюк! @Bassel Samman –

Смежные вопросы