[英]How to save a Foreign key from a controller class in Grails?
是Groovy nd Grails的新手。我不知道如何將外鍵保存到子表中。 我有兩個域類,分別稱為Person和Telephone。我必須嘗試保存,但不起作用。請幫助我。
人格
class Person {
String name
String password
static constraints = {
name(blank:false)
password(blank:false)
}
static hasMany = [telephone:Telephone]
@Override
public String toString() {
// TODO Auto-generated method stub
name
}
}
電話業務
class Telephone {
String number
Person person
static constraints = {
number(blank:false)
person()
}
static belongsTo = [person:Person]
@Override
public String toString() {
// TODO Auto-generated method stub
number
}
}
登錄人ID存儲到會話變量中。
session.setAttribute("user_id")
然后我嘗試保存號碼。
TelephoneController.groovy
class TelephoneController {
def index() {
redirect(action:'create')
}
def create(){
}
def save(){
def number=new Telephone(params)
int user_id=Integer.parseInt(session.getAttribute("user_id").toString())
params.person=user_id
if(!number.hasErrors() && number.save()){
println "save"
flash.toUser="Person Details [${number.number}] has been added."
redirect(view:'create')
}
}
}
但這不起作用。請幫助我。
我同意第一個答案。 您使代碼過於復雜。 如果您只想為一個人存儲許多電話號碼,那么這樣的話就足夠了:
class Person {
String name
String password
static hasMany = [phoneNumbers:String]
static constrains = ...
}
基本上,您不需要其他域類來僅存儲Person的數字列表。 然后,在控制器中,您需要:
def save() {
int user_id = session['user_id'] // no need to parse, Groovy will handle
def user = Person.get(user_id) // you need to fetch the Person from database (the same applies when using additional Telephone)
user.phoneNumbers << params.newNumber // the << operator acts here like add(String) method
user.save()
}
如果決定使用其他電話類,它將類似於:
def save() {
int user_id = session['user_id']
def user = Person.get(user_id)
def number = new Telephone(params)
number.person = user // important to create relation
number.save() // pay attention here, that in previous example the Person was saved, but now the Telephone is
}
同樣,當使用靜態belongsTo = [person:Person]時,您不需要在Telephone類中聲明Person字段。 無論如何將創建該屬性。
最后一個技巧是,在創建您的域類之后,嘗試運行命令grails generate-all Person(如果仍然使用grails generate-all Telephone)。 這將“架設”域類的默認控制器和視圖,您可以將其用作示例。
您的代碼看起來有些復雜,我認為您應該更輕松地實現目標,請嘗試閱讀Grails文檔,該文檔描述了一對多關系,您正在使用: http : //grails.org/doc /latest/guide/GORM.html#oneToMany
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.