我正在尝试使用rails嵌套的form_for帮助程序,但是我收到以下错误:
BlogPage(#49859550)预期,得到阵列(#31117360)
以下是我的模型对象:
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
这是我生成的表单(省略了不必要的HTML):
<% 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 %>
以下是发送到控制器的参数:
{ “提交”=&gt; “中保存”, “blog”=&gt; {“blog_pages”=&gt; {“content”=&gt;“这是新的博客条目内容。”}, “title”=&gt;“这是一个新的博客条目。”, “完成”=&gt; “中1”}, “authenticity_token”=&gt; “中T1Pr1g9e2AjEMyjtMjLi / ocrDLXzlw6meWoLW5LvFzc =”}
以下是具有执行创建操作的BlogsController:
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
如果有人能帮助我,我会非常感激。我仍然是ruby和rails框架的新手,并且无法通过Google搜索自行解决问题。
感谢。
答案 0 :(得分:2)
答案 1 :(得分:0)
将表单更改为:
<% 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 %>
如果你使用fields_for
,它会自动迭代blog_pages。但是我不确定这是否会导致错误。