#ruby-on-rails-3 #forms
#ruby-on-rails-3 #формы
Вопрос:
Я все еще немного новичок, когда дело доходит до rails, однако у меня есть вопрос о том, как создать многомодельную форму.
В принципе, у меня есть событие, и пользователь должен иметь возможность зарегистрироваться на мероприятие и предоставить кредитную карту для оплаты мероприятия. Кредитная карта (я не буду хранить фактические данные для CC, authorize.net будет, но мне нужно сохранить токен, представляющий карточку) будет жить с пользователем, чтобы они могли подписаться на другие события в будущем. Итак, я хочу, чтобы пользователь мог редактировать это в будущем, и карточка не привязана к одному событию. Это не похоже на то, с чем я бы использовал вложенные маршруты, не так ли?
У меня такое чувство, что это довольно просто, но, думаю, я просто не совсем уверен, как это сделать. Могу ли я использовать вложенные модели (не маршруты) и по-прежнему обновлять каждую часть независимо?
Ответ №1:
Если я понимаю ваш вопрос, то да, вы можете. Я думаю, вы имеете в виду что-то вроде этого:
class User < ActiveRecord::Base
has_one :credit_card
end
Если это правильно, то первым шагом будет добавление этого в класс User:
class User < ActiveRecord::Base
has_one :credit_card
accepts_nested_attributes_for :credit_card
end
На этом этапе вы могли бы просто настроить ресурс «пользователи» в файле routes и отредактировать кредитную карту с помощью метода fields_for в вашем режиме редактирования:
form_for @user do |f|
f.fields_for :credit_card do |ff|
ff.label :number
ff.text_field :number
end
f.submit
end
Помогает ли это?
Ответ №2:
Поскольку форматирование в комментариях запрещено, я даю ответ на это.
Спасибо @twmills за ваш ответ,
Я тоже новичок в rails. У меня есть вопрос, будет ли это работать в случае, если у меня есть следующие отношения:
class User < ActiveRecord::Base
has_many :credit_cards, :dependent => :destroy
accepts_nested_attributes_for :credit_card
end
class CreditCards < ActiveRecord::Base
belongs_to :user
end
В приведенном выше случае вы не можете создать объект CreditCard, если у вас нет родительского пользователя. f.fields_for :credit_card do |ff|
Также будет ли создан объект CraeditCard @user для f?
Насколько я понимаю, это невозможно, поскольку как будет указано представление, какую кредитную карту редактировать.
Во-вторых, при редактировании это нормально, но могу ли я сделать что-то подобное во время создания пользователя. т. Е. получить информацию о его кредитной карте во время создания пользователя.