В Rails я могу использовать accepts_nested_attributes_for, чтобы одна форма могла создавать два разных, но связанных объекта. Теперь я работаю над проектом Scala Lift, и я хочу сделать что-то подобное. У меня есть модель пользователя и модель адреса. Я хочу иметь одну форму, которая создает пользователя и их адрес. Как это работает в лифте?Может ли форма лифта принимать атрибуты для нескольких моделей?
ответ
В целом, лифт подходит к обработке форм, связывая функцию обработчика с каждым входом, который вызывается при представлении формы. В каждой из этих функций вы должны определить логику, необходимую для установки соответствующих полей в вашей модели.
Используя что-то вроде приведенного ниже примера, вы можете создавать экземпляры своих классов, а затем выполнять соответствующие действия при подаче. Вы увидите, что это создает класс User
и Address
, а затем устанавливает поле для каждого из них. Функция, связанная с кнопкой отправки, позаботится о сохранении их обоих. Поскольку действия выполняются в функции, вы можете включить столько логики, сколько необходимо для работы вашего приложения (преобразование данных, установка нескольких полей и т. Д.). Например, в логике отправки я связываю идентификатор Address
с User
, чтобы определить, как они связаны.
В вашем Snippet
val user = new User()
val address = new Address()
".nameField" #> SHtml.input(user.name, (txt) => {
user.name = txt
}) &
".addressField" #> SHtml.input(address.address1, (txt) => {
address.address1 = txt
}) &
".submit" #> SHtml.submit("Save",() => {
//persist address
user.addressId = address.id
//persist user
})
В вашем HTML
<form data-lift="form">
<input class="nameField"></input>
<input type="submit" class="submit"></input>
</form>
В общем, то, как бы вы сделать то, что вы хотите сделать. В дополнение к обработке всего самого себя, Lift включает в себя Mapper
, который в значительной степени является базой данных ORM. Я считаю, что может автоматизировать много сопоставлений отношений и упростить создание некоторых форм. Я не использую его сам, поэтому я не могу привести более конкретный пример. Но, если вы решите проверить это, вы можете найти более подробную информацию о Mapper here и here.
Ваш ответ был очень полезен! Спасибо! –
Должен ли я использовать сопоставленныеLongForeignKeys? –
Вы вообще спрашиваете, как это сделать с помощью Lift, или используете ли вы определенную технологию, например [Mapper] (https://www.assembla.com/wiki/show/liftweb/Mapper), с которой вам нужна помощь? – jcern
Я хочу знать, как это сделать в лифте. Я очень новичок в структуре. –