#<followup :: activerecord_associations_collectionproxy:0x00007f8d481b3dc0>的未定义方法'concert_id'是什么意思?康卡特

时间:2018-11-18 12:29:33

标签: ruby-on-rails ruby activerecord ruby-on-rails-5

我有一个跟进者和志愿者的模型:

class FollowUp < ApplicationRecord
  belongs_to :volunteer
  belongs_to :member
  belongs_to :concert
end

class Volunteer < ApplicationRecord
  enum type: [:admin, :regular]
  has_many :follow_ups, dependent: :delete_all
  has_many  :members, through:  :follow_ups
end

现在,我想打印所有志愿者的随访记录。 当我在Rails控制台(即Volunteer.first.follow_ups)中尝试时,效果很好 我想在表格中显示这些值,我尝试过的是:

Volunteer.all.each do |volunteer|
 volunteer.follow_ups.concert_id
end

2 个答案:

答案 0 :(得分:2)

has_many关系表示一对多关联。它不返回单个对象,而是返回follow_ups的集合。

也就是说,您无法执行volunteer.follow_ups.concert_id,因为follow_ups是一个Active Record集合。改为进行迭代:

volunteer.follow_ups.each { |follow_up| puts follow_up.concert_id }

The Ruby on Rails documentation has great content about Active Record Associations.

答案 1 :(得分:0)

要收集此类信息,您应该使用:

volunteer.follow_ups.pluck(:concert_id)

编辑:

非常重要的一点是,由于节省了服务器RAM和请求时间,因此使用pluck比使用mapeach之类的迭代器效率更高。然后您可以打印到Rails记录器:

volunteer.follow_ups.pluck(:concert_id).each{|ci| Rails.logger.info ci}

Edit2

引用您的文字

  

我想以表格形式显示这些值

如果我了解您,则希望以concert_id格式显示每个follow_up的{​​{1}}。在这种情况下,您应该添加

您的volunteer中的

accepts_nested_attributes_for :follow_ups 然后:

volunteer.rb

<%= form_for @volunteer do |f| %> <%= f.fields_for :follow_ups do |form_builder| %> <%= label_tag "custom_label", "follow up id : #{form_builder.object.id}, concert_id : #{form_builder.object.concert_id}%> <% end %> <% end %> 助手将遍历所有fields_for,然后您可以使用follow_ups为每个follow_up获取对象,这可以让您直接处理对象并获取对象。 object属性。