2012-07-13 4 views
0

id est présent dans les paramètres mais ne pas enregistrer à la DB. par exempleGrails problème d'enregistrement d'objet ID

[book.id:1, comments: good] 

les commentaires enregistreront en db mais book.id ne le fait pas.

J'ai besoin de comprendre comment enregistrer params.book.id dans la colonne db BOOK_ID qui a été créée à partir de la relation hasmany/belongsTo.

+1

Êtes-vous sûr? Avez-vous regardé à l'intérieur de la base de données? Je pense qu'il sauve l'id ... –

+0

Oui, l'échafaudage sauvera l'id mais il ne sauvera pas du contrôleur. Je suppose que je ne suis pas sûr de savoir comment attribuer params.book.id. Je n'avais pas réalisé que c'était une pièce d'identité dans l'échafaudage. Je vais devoir modifier ma question, je suppose. Merci. – Universitas

Répondre

0

Par défaut, l'attribut de valeur de chaque élément sera le résultat d'un appel toString() sur chaque élément. Le définir comme optionKey permet à la valeur d'être une propriété bean de chaque élément de la liste.

changer Veuillez la sélection pour

<g:form action="review"> 
    <g:select name="book.id" 
    from="${item.Book.list()}" 
    value="${book?.id}" 
    /> 

<g:textField name="bookreview" value="${params?.bookreview}" /><br> 

veuillez vous référer au lien ci-dessous

Grail example with optionkey

0

Vous avez écrasé toString donc vos livres sont toujours rendus par name et non . Si vous supprimez votre méthode toString(), vous verrez les résultats attendus. Si vous voulez que votre boîte de sélection fonctionne avec le nom, ajoutez optionValue="name".

0

Eh bien, il semble que j'avais mal orthographié un paramètre crucial dans mon domaine. Donc le domaine attendait x et ça devenait y. Ainsi, l'identifiant était toujours nul. Il m'a fallu du temps pour le repérer, et j'étais perplexe parce que j'avais déjà implémenté avec succès des identifiants dans un autre projet. Grails a aussi des problèmes jira qui font que l'on considère d'autres possibilités, mais cette fois c'était mon erreur.