views:

37

answers:

0

I am facing a problem due to that i'm newbie to grails i'm doing a website for reading stories and my goal now is to do save the content of the story into several pages to get a list and then paginate it easily .. so i did the following.

in the domain i created two domains one called story and have this :

class Story {

String title

List pages

static hasMany=[users:User,pages:Page]
static belongsTo = [User]

static mapping={
    users lazy:false
    pages lazy:false

}

}

and have of course domain called page have this :

class Page {
String Content
Story story
static belongsTo = Story
static constraints = {
    content(blank:false,size:3..300000)
}

}

and the controller saving method gone like this:

 def save = {
    def storyInstance = new Story(params)
    def pages = new Page(params)
    String content = pages.content
    String[] contentArr = content.split("\r\n")

    int i=0

    StringBuilder page = new StringBuilder()
    for(StringBuilder line:contentArr){
        i++
        page.append(line+"\r\n")

        if(i%10==0){

               pages.content = page
               storyInstance.addToPages(pages)
               page =new StringBuilder()
        }
    }



    if (storyInstance.save(flush:true)) {
        flash.message = "${message(code: 'default.created.message', args: [message(code: 'story.label', default: 'Story'), storyInstance.id])}"
        redirect(action: "viewstory", id: storyInstance.id)
    }else {
        render(view: "create", model: [storyInstance: storyInstance])
    }
}

i know it looks messy but it's a prototype..any way.. the problem is that i'm waiting from "storyInstance.addToPages(pages)" line to add to the set of pages an instance of the pages every time the condition is true..but what actually happen that it's give me the last instane only with the last page_idx while i thought it should save the pages one by one and so i can get a list of pages to every story..

why this happen and is there a simpler way to do it than what i did..

i'm waiting for any help here that is appreciated