【问题标题】:rails 4 multiple ruby arrays with nested attributesrails 4具有嵌套属性的多个ruby数组
【发布时间】:2016-07-15 13:03:01
【问题描述】:

我正在尝试构建一个拉数组数组的方法,很像视图中的嵌套循环。

我正在尝试在我的用户模型上构建一个方法来执行此操作:

@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.past_guests,如果 current_user 是 User 的一个实例。),我得到了这个错误

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

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

【问题讨论】:

  • 你在User类上调用实例方法past_guests,把方法改成类方法。
  • 啊,不,我写错了...我的意思是说 current_user.past_guests,而不是 User.past_guests。我已经修好了。

标签: ruby-on-rails arrays ruby


【解决方案1】:

问题是您正试图从另一个array 访问array

self.parties.guests

self.parties 返回一个#&lt;ActiveRecord::Associations::CollectionProxy []&gt;,所以如果你想得到parties 中的guests,你必须遍历元素。

但由于您只想要客人,您可以简单地将您的 user 类更改为:

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

【讨论】:

    【解决方案2】:

    每个聚会都会有客人集合。您需要在方法定义中执行此操作:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多