MissingMethodException появляется при сохранении действия - PullRequest
0 голосов
/ 28 марта 2012

Я работаю с примером из Grails in Action, в частности, впервые внедряя Сервис и перенося работу с Контроллера на Сервис.

У меня есть объект Post, содержащий контент User и String..

Сервисный код

class PostService {
  boolean transactional= true

  Post createPost(String user, String content){
    def thisUser = User.findByUserID(user)
      if (user){
        def post = new Post(content:content)
          if (user.save()){
            return post
        } else
            throw new PostException(message: "Invalid post", post:post)
      }

    throw new PostException(message:"Invalid User ID")
    }

}

, а код контроллера

def addPost = {

  try{
    def newPost = postService.createPost(params.id, params.content)
    flash.message= "Added new Post: $newPost.content}"

  } catch (PostException pe){
    flash.message = pe.message
  }
  redirect(action:'timeline', id:params.id)
}

То, как этот код должен работать, - это ввод в форме, которая передается в addPost как объект params.Затем указанный объект params передается в Службу, где создается новое сообщение и связывается с ним.

Однако я получаю ошибку в user.save().Конкретное сообщение об ошибке:

No signature of method: java.lang.String.save() is applicable for argument types: () values: []

Если я стираю сервисный разъем и внедряю сервисный код в контроллер как

def user = User.findByUserID(params.id)

  if (user) {
    def post= new Post(params)
    user.addToPosts(post)

    if (user.save()){
      flash.message= "Sucessfully created Post"
} 

else {
      user.discard()
      flash.message = "Invalid or empty post"
    }

  } else {
    flash.message = "Invalid User ID"
  }
  redirect(action: 'timeline', id:params.id)
}

, действие работает.Так почему я получаю ошибку user.save() при реализации службы, а не у контроллера?

1 Ответ

1 голос
/ 28 марта 2012

user - это строка, которую вы передаете методу сервиса. thisUser - это фактический объект User, который вы получаете, и который можно вызвать save().

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