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.
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. –
Merci. J'ai ajouté certaines des suggestions que vous avez recommandées. Qu'est-ce que l'ajout nécessite 'pp'? –