2010-02-02 5 views
1

Je suis en train d'utiliser des rails imbriqués form_for aide, mais je reçois l'erreur suivante:Ruby on Rails modèle emboîtées

blogpage (# 49859550) prévu, obtenu Array (# 31117360)

Voici mes objets de modèle:

class Blog < ActiveRecord::Base 
    # Table Configuration 
    set_table_name "blog" 

# Model Configuration 
belongs_to :item 
has_many :blog_pages 
accepts_nested_attributes_for :blog_pages, :allow_destroy => true 
end 

class BlogPage < ActiveRecord::Base 
    # Table Configuration 
    set_table_name "blog_page" 

    # Model Configuration 
    belongs_to :blog 
end 

est ici la forme que je generated (omis HTML inutile):

<% form_for :blog, :url => { :action => :create } do |blog_form| %> 
    <%= blog_form.text_field :title, :style => "width: 400px" %> 
    <% blog_form.fields_for :blog_pages do |page_fields| %> 
     <% @blog.blog_pages.each do |page| %> 
      <%= page_fields.text_area :content, :style => "width: 100%", 
       :cols => "10", :rows => "20" %> 
     <% end %> 
    <% end %> 
<% end %> 

Voici les paramètres qui sont envoyés au contrôleur:

{ "commit" => "Enregistrer", "blog" => { "blog_pages" => { "content" => "Ceci est le contenu des nouvelles entrées de blog."}, "title" => "Ceci est une nouvelle entrée de blog.", "complete" => "1"}, "authenticity_token" => "T1Pr1g9e2AjEMyjtMjLi/ocrDLXzlw6meWoLW5LvFzc = "}

Voici le BlogsController avec l'action create qui est exécutée:

class BlogsController < ApplicationController 
    def new 
    @blog = Blog.new # This is the line where the error gets thrown. 
    # Set up a page for the new blog so the view is displayed properly. 
    @blog.blog_pages[0] = BlogPage.new 
    @blog.blog_pages[0].page_number = 1 
    respond_to do |format| 
     format.html # Goes to the new.html.erb view. 
     format.xml { render :xml => @blog } 
     format.js { render :layout => false} 
    end 
    end 

    def create 
    @blog = Blog.new(params[:blog]) 

    respond_to do |format| 
     if @blog.save 
     render :action => :show 
     else 
     flash[:notice] = "Error occurred while saving the blog entry." 
     render :action => :new 
     end 
    end 
    end 
end 

Si quelqu'un peut m'aider avec cela, je l'apprécierais grandement. Je suis encore assez nouveau pour ruby ​​et le cadre de rails et ne pouvais pas résoudre le problème par moi-même en googlant.

Merci.

+0

Vous devez ajouter le numéro de ligne et commenter dans votre code où l'erreur se produit. Vous devriez également rediriger si @ blog.save réussit. À l'heure actuelle, l'actualisation du navigateur peut entraîner l'insertion d'enregistrements en double. require 'pp' et utilisez 'raise @ blog.pretty_inspect' pour voir quel type de tableau vous avez. –

+0

Merci. J'ai ajouté certaines des suggestions que vous avez recommandées. Qu'est-ce que l'ajout nécessite 'pp'? –

Répondre

0

Changer votre formulaire à ceci:

<% form_for :blog, :url => { :action => :create } do |blog_form| %> 
    <%= blog_form.text_field :title, :style => "width: 400px" %> 
    <% blog_form.fields_for :blog_pages do |page_fields| %> 
      <%= page_fields.text_area :content, :style => "width: 100%", 
       :cols => "10", :rows => "20" %> 
    <% end %> 
<% end %> 

Si vous utilisez fields_for il itère sur blog_pages automaticaly. Cependant, je ne suis pas sûr si cela a causé des erreurs.