Неопределенный метод "hall_id" для #Ты имел ввиду?CONCAT - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть модель follow_ups и волонтеров:

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

Теперь я хотел напечатать follow_ups всеми добровольцами. Он работал нормально, когда я пытался в консоли рельсов, т. Е. Volunteer.first.follow_ups Я хочу показать это значение в форме, которую я пробовал:

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

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Для сбора такой информации вы должны использовать:

volunteer.follow_ups.pluck(:concert_id)

Edit:

Очень важно отметить, что использование pluck более эффективно, чем использование итераторов, таких как map и each, благодаря экономии оперативной памяти сервера и времени запроса. Затем вы можете распечатать на рельсах регистратор:

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

Edit2

Ссылаясь на ваш текст

Я хочу показать это значение в виде

Если я вас понимаю, вы хотите показать concert_id каждого follow_up в форме 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, что позволит вам иметь дело с объектом напрямую и получить от него атрибут concert_id.

0 голосов
/ 18 ноября 2018

Отношение has_many обозначает связь один ко многим. Вместо того, чтобы возвращать один объект, он возвращает коллекцию follow_ups.

Тем не менее, вы не можете сделать volunteer.follow_ups.concert_id, потому что follow_ups - это коллекция Active Record. Вместо этого сделайте итерацию:

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

Документация по Ruby on Rails содержит большое количество сведений об ассоциациях активных записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...