0

Мне нужно разработать приложение для управления пользователями в ИТ-проекте. Это делается для того, чтобы узнать Grails. У меня есть некоторые проблемы, чтобы начать с:Как я могу выбрать модель моего домена в этом случае?

В моем примере приложения пользователь имеет много задач, принадлежит к проекту, имеет много статусов праздника, принадлежит к планированию ресурсов и это его. (вид требований!)

Теперь ..... Когда дело доходит до моделирования доменов, как я на самом деле моделирую это? Я подошел к решению моделирования чего-то вроде этого:

class User { 
     //relationships. . . . 
     static belongsTo = [ company : Company, role : Role, resource : Resource] 
     static hasMany = [ holidays : Holiday, tasks : Tasks ] 
     Profile profile 
     Project project 
     String login 
     String password 
     static constraints = { 
       login(unique:true,size:6..15) 
       profile(nullable:true) 
     } 
     String toString() { 
       this.login 
     } 
} 

Теперь использование лесов Грайла. Я сгенерировал представление, хм, хорошо, вот где я попал!

С этой моделью, четко при создании нового пользователя., Мне нужно отдать детали проекта, детали ресурсов. Несмотря на то, что я могу изменить представление, поскольку мне нужно, например, мне нужно только два поля: введите логин и пароль, чтобы новый Пользователь зарегистрировал мой сайт. Но согласно моделированию данных, как я могу обрабатывать другие поля, такие как Профиль, Проект и другие отношения. Это звучит сложно! Я знаю, что я новичок в веб-разработке, и мне нужны ваши предложения и как я могу продолжить это?

Заранее спасибо.

+1

попробуйте http://grails.org/doc/2.0.x/ref/Domain%20Classes/hasOne.html с профилем и проектом и поднимите все классы домена. –

ответ

3

Вам необходимо переопределить действие в вашем контроллере save и заполнить эти дополнительные поля.

Попробуйте добавить следующий код в UserController:

def save = { 
    def userInstance = User.get(params.id) 
    if (!userInstance) { 
     userInstance = new User() 

     // here you can fill in additional fields: 
     userInstance.profile = myMethodToGetTheProfile() 
     userInstance.project = myMethodToGetTheProject() 
     ... 
    } 
    userInstance.properties = params 
    if (userInstance.save(flush: true)) { 
     flash.message = message(code: 'default.created.message', args: [message(code: 'User.propertyName.label', default: 'User'), userInstance.id])} 
     redirect(action: session.lastActionName ?: "list", controller: session.lastControllerName ?: controllerName) 
    } else { 
     render(view: "form", model: [userInstance: userInstance, mode: 'edit']) 
    } 
} 

Реализация методов, чтобы получить проект по умолчанию зависит от логики вашего приложения.

+0

+1 приятный :) и хорошо это то, что я сделал. Я создал статические леса на требуемом классе. И в конкретном '_form.gsp' я добавил соответствующие поля формы в соответствующие классы через поля html и gsp. Например, при создании 'User' я поместил поля' Profile' в одну форму (так как существует связь между этими двумя классами, используя синтаксис, например 'profile.name' и т. Д.). И он отлично работает. Теперь мой вопрос: что я сделал, это хорошая практика? Или плохой? –

+1

Я думаю, что это хорошая практика. Не забывайте проверять прошедшие параметры, хотя, поскольку пользователи могут подделывать значения, записанные в поля формы (и таким образом, например, получить доступ к другим проектам) – socha23

+0

спасибо за ваш ответ .. –