rails 4具有嵌套属性的多个ruby数组

问题描述:

我试图构建一个拉取数组的数组,非常像视图中的嵌套循环。rails 4具有嵌套属性的多个ruby数组

我试图建立在我的用户模型的方法,这是否:

@past_parties = User.parties 

<%= @past_parties.each do |past_party| %> 
    <%= past_party.guests("email").uniq.each do |guest| %> 
    <%= guest.name %> <%= guest.email %> 
    <% end %> 
<% end %> 

这是我的模型:

class User < ActiveRecord::Base 

    has_many :hosts, dependent: :destroy 
    has_many :parties, through: :hosts 

    def past_guests 
    self.parties.guests 
    end 
end 

class Host < ActiveRecord::Base 
    belongs_to :user 
    has_many :parties, dependent: :destroy 
    has_many :guests, through: :parties 

end 

class Party < ActiveRecord::Base 

    belongs_to :host 
    has_many :guests, dependent: :destroy 

end 

class Guest < ActiveRecord::Base 

    belongs_to :party 

end 

我能得到循环的视图中的工作,但当我尝试将它构建为一种方法时(因此,如果current_user是用户的实例,则可以调用current_user.past_guests),我得到此错误

undefined method `guests' for #<ActiveRecord::Associations::CollectionProxy []> 

如何在没有在视图中构建循环的情况下获取用户邀请的所有客人?

+0

您在用户类调用实例方法past_guests,改变方法类方法。 – power

+0

啊,不,我写错了......我的意思是说current_user.past_guests,而不是User.past_guests。我修复了它。 – NothingToSeeHere

的问题是,你想从另一个array访问array

self.parties.guests 

self.parties返回#<ActiveRecord::Associations::CollectionProxy []>,所以如果你想得到partiesguests,你必须遍历元素。

但因为只需要客人,你可以简单地改变你的用户类:

class User < ActiveRecord::Base 

    has_many :hosts, dependent: :destroy 
    has_many :parties, through: :hosts 
    has_many :guests, through: :parties 

    # Call your guests 
    def past_guests 
    self.guests 
    end 
end 

每一方都将有收集的客人。你需要做这在你的方法定义:

def past_guests 
    self.parties.collect(&:guests) 
end