Объект UserProifle не может быть сохранен для ShiroUser - PullRequest
0 голосов
/ 21 февраля 2012

Я работаю над приложением Grails и пытаюсь связать ShiroUser с профилем пользователя.У меня есть две модели под названием ShiroUser и UserProfile.В моем ShiroUser:

class ShiroUser {
    ... ...
    static hasOne = [profile: UserProfile]
    static constraints = {
       email(nullable: false, blank: false, unique: true)
       profile(nullable: false)
    }
}

И в моем UserProfile.groovy у меня есть:

class UserProfile {
    ... ...
    static belongsTo = [shiroUser:ShiroUser]

}

Однако в моем ShiroUserController.groovy, когда я пытаюсь создать новый экземпляр ShiroUser,это не так хорошо работает.Вот мой код:

 def create() {
        [shiroUserInstance: new ShiroUser(params), userProfileInstance: new  UserProfile()]
    }
def save() {

        //todo add validation for email and password here.
        def shiroUserInstance = new ShiroUser(params)

        // Create a user profile
        def userProfileInstance = new UserProfile()
        shiroUserInstance.profile.email = params.email
        shiroUserInstance.profile.firstName = params.firstName
        shiroUserInstance.profile.lastName = params.lastName

        if (!userProfileInstance.save(flush: true)){
            render(view: "create", model: [userProfileInstance: userProfileInstance])
            return
        }
        shiroUserInstance.profile = userProfileInstance

        if (!shiroUserInstance.save(flush: true)) {
            render(view: "create", model: [shiroUserInstance: shiroUserInstance])
            return
        }

        flash.message = message(code: 'default.created.message', args: [message(code: 'shiroUser.label', default: 'ShiroUser'), shiroUserInstance.id])
        redirect(action: "show", id: shiroUserInstance.id)
    }

Когда я захожу в свое приложение и пытаюсь создать новый ShiroUser, объект не может быть сохранен.Я обновил схему перед запуском приложения, чтобы не было проблем с миграцией.Есть мысли?

1 Ответ

0 голосов
/ 21 февраля 2012

Похоже, что в этом блоке кода вы назначаете email, firstName и lastName неправильному объекту:

    // Create a user profile
    def userProfileInstance = new UserProfile()
    shiroUserInstance.profile.email = params.email
    shiroUserInstance.profile.firstName = params.firstName
    shiroUserInstance.profile.lastName = params.lastName

Попробуйте вместо этого:

    // Create a user profile
    def userProfileInstance = new UserProfile()
    userProfileInstance.email = params.email
    userProfileInstance.firstName = params.firstName
    userProfileInstance.lastName = params.lastName
    shiroUserInstance.profile = userProfileInstance

После этого вы сможете просто сохранить shiroUserInstance, и он также автоматически сохранит userProfileInstance, если вы правильно настроили отображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...