在Rails中,我可以使用accepts_nested_attributes_for来允许单个表单创建两个不同但相关的对象。现在,我正在研究Scala Lift项目,我想做类似的事情。我有一个用户模型和一个地址模型。我想要一个创建用户及其地址的表单。这在Lift中如何工作?
答案 0 :(得分:1)
通常,Lift方法通过将处理函数绑定到在表单提交上调用的每个输入来形成处理。在每个函数中,您将定义在模型中设置相应字段所需的逻辑。
使用类似下面的示例,您可以实例化您的类,然后在提交时执行适当的操作。您将看到这会创建一个User
和一个Address
类,然后在每个类上设置一个字段。绑定到提交按钮的函数将保持它们两者的持久性。由于操作发生在函数中,因此您可以根据需要包含尽可能多的逻辑,以使您的应用程序正常工作(数据转换,设置多个字段等)。例如,在提交逻辑中,我将Address
的ID与User
相关联,以定义它们之间的关联。
在您的代码段
中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上找到更多相关信息。