Ruby on rails 500在Rails中提交嵌套表单时出现内部服务器错误
当我提交嵌套表单时,我得到一个500内部服务器错误,该表单有两个模型-Member和ChildrenInformation 错误: 500内部服务器错误 如果您是此网站的管理员,请阅读此web应用程序的日志文件和/或web服务器的日志文件,以了解出现的问题 我检查了日志文件,发现如下: TypeError(参数'child\u info\u attrib'应为哈希(got数组)):Ruby on rails 500在Rails中提交嵌套表单时出现内部服务器错误,ruby-on-rails,ruby,ruby-on-rails-3,forms,internal-server-error,Ruby On Rails,Ruby,Ruby On Rails 3,Forms,Internal Server Error,当我提交嵌套表单时,我得到一个500内部服务器错误,该表单有两个模型-Member和ChildrenInformation 错误: 500内部服务器错误 如果您是此网站的管理员,请阅读此web应用程序的日志文件和/或web服务器的日志文件,以了解出现的问题 我检查了日志文件,发现如下: TypeError(参数'child\u info\u attrib'应为哈希(got数组)): 以下是我的rails项目的其他部分 查看(new.html.erb> 是的, :订单=>[:月,:
以下是我的rails项目的其他部分 查看(new.html.erb>
是的,
:订单=>[:月,:日,:年],:开始年=>1900%>
`
模型(成员)
类成员
模型(儿童信息)class-ChildrenInformation
控制器(成员控制器)类成员控制器@member}
结束
结束
def创建
@member=member.new(参数[:member])
回应待办事项|格式|
如果@member.save
format.html{redirect_to(@member,:notice=>“已成功创建成员”)}
format.xml{render:xml=>@member,:status=>:created,:location=>@member}
其他的
format.html{render:action=>“new”}
format.xml{render:xml=>@member.errors,:status=>:unprocessable_entity}
结束
结束
结束
开发日志:(members表有很多字段)到目前为止,我试图省略嵌套表单,但它确实起到了作用。
此外,我还通过RailsCasts()以这种方式使用嵌套表单。
如何使用嵌套表单成功提交
提前感谢!:)我认为您构建嵌套表单的方式不正确:
#app/views/members/new.html.erb
<% for children_information in @member.children_informations %>
<%= fields_for "member[child_info_attrib][]", children_information do |children_info_form| %>
<div class="field">
<%= children_info_form.label :name, "Name" %><br />
<%= children_info_form.text_field :name %>
</div>
<div class="field">
<%= children_info_form.label :gender, "Gender" %><br />
<%= children_info_form.select :gender, options_for_select(["Male", "Female"]) %>
</div>
<div class="field">
<%= children_info_form.label :birthdate, "Birthdate" %><br />
nn <%= children_info_form.datetime_select :birthdate, :discard_hour => true,
:order => [:month, :day, :year], :start_year => 1900 %>
</div>
</div>
<% end %>
<% end %>
#app/views/members/new.html.erb
是的,
:订单=>[:月,:日,:年],:开始年=>1900%>
您需要这样做:
查看
<%= f.fields_for :children_informations do |children_info_form| %>
<div class="field">
<%= children_info_form.label :name, "Name" %><br />
<%= children_info_form.text_field :name %>
</div>
<div class="field">
<%= children_info_form.label :gender, "Gender" %><br />
<%= children_info_form.select :gender, options_for_select(["Male", "Female"]) %>
</div>
<div class="field">
<%= children_info_form.label :birthdate, "Birthdate" %><br />
nn <%= children_info_form.datetime_select :birthdate, :discard_hour => true,
:order => [:month, :day, :year], :start_year => 1900 %>
</div>
</div>
<% end %>
是的,
:订单=>[:月,:日,:年],:开始年=>1900%>
这将使用正确的数据创建表单元素,但我也认为可以改进对数据的处理。由于您使用的是Rails 3,我将等待评论,看看您是否希望我为其编写一些代码 您正在关注的railscast事件日期为2007年。 我认为这种方法在嵌套表单中不是最好的 这个 可以简化为这样(如果您使用的是rails 3.x>) 属性可访问:儿童属性
接受\u嵌套的\u属性\u for:childs 如果您需要参考资料或一些教程,我建议
或者如果你不喜欢这些,你可以看看这个宝石
这简化了您试图实现的目标 我弄脏了RailsCasts关于嵌套表单的一集()的注释,认为它已经过时,这是一个错误,我应该关注该主题的最新一集()。它现在起作用了:)Hi@rich peck。我尝试了你的答案,它确实成功地提交了表格。但当我检查数据库时,这些字段都是空的,但有记录项。这意味着当它们进入模型时,我们没有正确处理它们-你有传递参数的日志吗?我如何检索参数?如果你进入
root\u dir/log
并打开开发者登录,应该有请求-你必须找到最新的一个,其中您已经提交了您的表格-我们将进行查看,看看我们能做些什么hi@rav谢谢:)这提醒您使用更新的railscast。
class ChildrenInformation < ActiveRecord::Base
belongs_to :member
end
class MembersController < ApplicationController
def new
@member = Member.new
@member.children_informations.build
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @member }
end
end
def create
@member = Member.new(params[:member])
respond_to do |format|
if @member.save
format.html { redirect_to(@member, :notice => 'Member was successfully created.') }
format.xml { render :xml => @member, :status => :created, :location => @member }
else
format.html { render :action => "new" }
format.xml { render :xml => @member.errors, :status => :unprocessable_entity }
end
end
end
#app/views/members/new.html.erb
<% for children_information in @member.children_informations %>
<%= fields_for "member[child_info_attrib][]", children_information do |children_info_form| %>
<div class="field">
<%= children_info_form.label :name, "Name" %><br />
<%= children_info_form.text_field :name %>
</div>
<div class="field">
<%= children_info_form.label :gender, "Gender" %><br />
<%= children_info_form.select :gender, options_for_select(["Male", "Female"]) %>
</div>
<div class="field">
<%= children_info_form.label :birthdate, "Birthdate" %><br />
nn <%= children_info_form.datetime_select :birthdate, :discard_hour => true,
:order => [:month, :day, :year], :start_year => 1900 %>
</div>
</div>
<% end %>
<% end %>
<%= f.fields_for :children_informations do |children_info_form| %>
<div class="field">
<%= children_info_form.label :name, "Name" %><br />
<%= children_info_form.text_field :name %>
</div>
<div class="field">
<%= children_info_form.label :gender, "Gender" %><br />
<%= children_info_form.select :gender, options_for_select(["Male", "Female"]) %>
</div>
<div class="field">
<%= children_info_form.label :birthdate, "Birthdate" %><br />
nn <%= children_info_form.datetime_select :birthdate, :discard_hour => true,
:order => [:month, :day, :year], :start_year => 1900 %>
</div>
</div>
<% end %>
def child_info_attrib=(attribs)
attribs.each do |attrib|
children_informations.build(attrib)
end
end