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 []>
如何在没有在视图中构建循环的情况下获取用户邀请的所有客人?
答
的问题是,你想从另一个array
访问array
:
self.parties.guests
self.parties
返回#<ActiveRecord::Associations::CollectionProxy []>
,所以如果你想得到parties
的guests
,你必须遍历元素。
但因为只需要客人,你可以简单地改变你的用户类:
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
您在用户类调用实例方法past_guests,改变方法类方法。 – power
啊,不,我写错了......我的意思是说current_user.past_guests,而不是User.past_guests。我修复了它。 – NothingToSeeHere