2013-12-18 2 views
0

В Rails я могу использовать accepts_nested_attributes_for, чтобы одна форма могла создавать два разных, но связанных объекта. Теперь я работаю над проектом Scala Lift, и я хочу сделать что-то подобное. У меня есть модель пользователя и модель адреса. Я хочу иметь одну форму, которая создает пользователя и их адрес. Как это работает в лифте?Может ли форма лифта принимать атрибуты для нескольких моделей?

+0

Должен ли я использовать сопоставленныеLongForeignKeys? –

+0

Вы вообще спрашиваете, как это сделать с помощью Lift, или используете ли вы определенную технологию, например [Mapper] (https://www.assembla.com/wiki/show/liftweb/Mapper), с которой вам нужна помощь? – jcern

+0

Я хочу знать, как это сделать в лифте. Я очень новичок в структуре. –

ответ

1

В целом, лифт подходит к обработке форм, связывая функцию обработчика с каждым входом, который вызывается при представлении формы. В каждой из этих функций вы должны определить логику, необходимую для установки соответствующих полей в вашей модели.

Используя что-то вроде приведенного ниже примера, вы можете создавать экземпляры своих классов, а затем выполнять соответствующие действия при подаче. Вы увидите, что это создает класс 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.

+0

Ваш ответ был очень полезен! Спасибо! –

Смежные вопросы