我有一个跟进者和志愿者的模型:
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
答案 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
比使用map
和each
之类的迭代器效率更高。然后您可以打印到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
属性。