레일즈에서는 accepts_nested_attributes_for를 사용하여 하나의 폼이 두 개의 서로 다르지만 관련된 객체를 생성 할 수 있습니다. 이제 스칼라 리프트 프로젝트를 진행 중이며 비슷한 것을하고 싶습니다. 나는 User 모델과 Address 모델을 가지고있다. 나는 사용자와 그 주소를 생성하는 하나의 양식을 원한다. 리프트에서 어떻게 작동합니까?리프트 양식은 여러 모델에 대한 속성을 허용 할 수 있습니까?
답변
일반적으로 Lift는 양식 제출시 호출되는 각 입력에 처리기 함수를 바인딩하여 양식 처리에 접근합니다. 각 함수에서 모델의 적절한 필드를 설정하는 데 필요한 논리를 정의합니다.
아래 예와 같이 클래스를 인스턴스화 한 다음 제출시 적절한 조치를 수행 할 수 있습니다. 이 경우 User
및 Address
클래스가 만들어지고 각 필드에 필드가 설정됩니다. 제출 버튼에 바인딩 된 함수는 둘 모두를 유지 관리합니다. 함수는 함수에서 발생하므로 응용 프로그램을 작동시키는 데 필요한만큼의 논리 (데이터 변환, 여러 필드 설정 등)를 포함 할 수 있습니다. 예를 들어 제출 로직에서 Address
의 ID를 User
으로 연결하여 관련성을 정의합니다. 당신의 HTML 일반적으로
<form data-lift="form">
<input class="nameField"></input>
<input type="submit" class="submit"></input>
</form>
에서 당신의 발췌문
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
})
에서
, 그건 당신이 당신이 찾고있는 무엇을 달성 할 방법이다. 모든 것을 직접 처리하는 것 외에도 Lift는 데이터베이스 ORM 인 Mapper
을 포함합니다. 관계 매핑을 자동화하고 일부 양식을 쉽게 만들 수 있다고 생각합니다. 나는 그것을 직접 사용하지 않으므로 더 구체적인 예를 드릴 수는 없다. 하지만 확인해 보려면 Mapper here 및 here에 대한 자세한 정보를 참조하십시오.
귀하의 답변은 매우 도움이되었습니다! 고맙습니다! –
mappedLongForeignKeys를 사용해야합니까? –
일반적으로 Lift를 사용하여이를 수행하는 방법을 묻거나, [Mapper] (https://www.assembla.com/wiki/show/liftweb/Mapper)와 같은 특정 기술을 사용하여 도움이 필요합니까? – jcern
나는 이런 종류의 일을하는 법을 일반적으로 알고 싶다. 나는이 프레임 워크에 대해 아주 새롭다. –