Problems with rails and saving to the database.

Posted by Grantismo on Stack Overflow See other posts from Stack Overflow or by Grantismo
Published on 2010-04-03T01:12:55Z Indexed on 2010/04/03 1:23 UTC
Read the original article Hit count: 278

Filed under:
|

I've been having some difficulty in understanding the source of a problem. Below is a listing of the model classes. Essentially the goal is to have the ability to add sentences to the end of the story, or to add stories to an existing sentence_block. Right now, I'm only attempting to allow users to add sentences, and automatically create a new sentence_block for the new sentence.

class Story < ActiveRecord::Base
  has_many :sentence_blocks, :dependent => :destroy
  has_many :sentences, :through => :sentence_blocks

  accepts_nested_attributes_for :sentence_blocks
end

class SentenceBlock < ActiveRecord::Base
  belongs_to :story
  has_many :sentences, :dependent => :destroy
end

class Sentence < ActiveRecord::Base
  belongs_to :sentence_block

  def story
    @sentence_block = SentenceBlock.find(self.sentence_block_id)
    Story.find(@sentence_block.story_id)
  end
end

The problem is occurring when using the show method of the Story. The Story method is as follows, and the associated show method for a sentence is also included.

Sentence.show

def show
  @sentence = Sentence.find(params[:id])
  respond_to do |format|
    format.html {redirect_to(@sentence.story)}
    format.xml  { render :xml => @sentence }
  end
end

Story.show

def show
 @story = Story.find(params[:id])

 @sentence_block =  @story.sentence_blocks.build
 @new_sentence = @sentence_block.sentences.build(params[:sentence])

 respond_to do |format|
   if @new_sentence.content != nil and @new_sentence.sentence_block_id != nil and   @sentence_block.save and @new_sentence.save
     flash[:notice] = 'Sentence was successfully added.' 
     format.html # new.html.erb
     format.xml  { render :xml => @story }
   else
     @sentence_block.destroy
     format.html
     format.xml  { render :xml => @story } 
   end
 end
end

I'm getting a "couldn't find Sentence_block without and id" error. So I'm assuming that for some reason the sentence_block isn't getting saved to the database. Can anyone help me with my understanding of the behavior and why I'm getting the error? I'm trying to ensure that every time the view depicts show for a story, an unnecessary sentence_block and sentence isn't created, unless someone submits the form, I'm not really sure how to accomplish this. Any help would be appreciated.

© Stack Overflow or respective owner

Related posts about beginner

Related posts about ruby-on-rails