Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 500在Rails中提交嵌套表单时出现内部服务器错误_Ruby On Rails_Ruby_Ruby On Rails 3_Forms_Internal Server Error - Fatal编程技术网

Ruby on rails 500在Rails中提交嵌套表单时出现内部服务器错误

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> 是的, :订单=>[:月,:

当我提交嵌套表单时,我得到一个500内部服务器错误,该表单有两个模型-Member和ChildrenInformation

错误:

500内部服务器错误

如果您是此网站的管理员,请阅读此web应用程序的日志文件和/或web服务器的日志文件,以了解出现的问题

我检查了日志文件,发现如下:

TypeError(参数'child\u info\u attrib'应为哈希(got数组)):

以下是我的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