#ruby-on-rails
#ruby-on-rails
Вопрос:
У меня есть форма, которая позволяет пользователю зарегистрироваться для участия в турнире. В процессе создания регистрационной формы я использую динамические вложенные поля с пока field_type basic . Когда я загружаю новую форму участников, я пытаюсь загрузить все поля из таблицы полей с помощью field_type из basic . Он найдет их, и если я просто попробую <%= @basic.name %> из новой формы он даст имя последнего поля в базе данных с этим field_type , но если я попытаюсь:
<% @basic.each do |b| %>
<%= b.name %>
<% end
Я получаю сообщение об ошибке неопределенный метод `each’ для #<Field.
Вот новое действие от participants_controller:
def new
@participant = @event.participants.new
@user = User.find(current_user.id)
@children = @user.children
@basic = Field.find_by(event_id: @event.id, field_type: 'basic')
end
Поля принадлежат событиям, но должен ли я подключать их к участникам, чтобы это работало?
Спасибо
Ответ №1:
find_by
возвращает только одну запись (или nil
, если критерии не совпадают), используемую where
для возврата коллекции.
@basic = Field.where(event_id: @event.id, field_type: 'basic')
Однако, предполагая, что у вас есть ассоциация has_many :fields
, определенная в Event
, вы также можете использовать:
@basic = @event.fields.where(field_type: 'basic')
И если у вас есть scope :basic, -> { where(field_type: 'basic') }
определенный, Field
вы можете еще больше упростить:
@basic = @event.fields.basic