accepts_nested_attributes_for不将child属性保存到数据库 [英] accepts_nested_attributes_for not saving the child attribute to the database

查看:59
本文介绍了accepts_nested_attributes_for不将child属性保存到数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的accepts_nested_attributes_for仅保存父属性,而不保存子(嵌套)属性.这是父母与子女之间的many_to_many关系.

My accepts_nested_attributes_for only saves the parent and not the child (nested) attributes. This is many_to_many relationship between parent and child.

问题:什么也没发生,什么也没有保存.但是在页面上,我收到以下消息:

Problem: nothing happens and nothing is saved. But on the page, I get this message:

utf8: "\xE2\x9C\x93"
authenticity_token: 9Pjxt7e5RRgWVGafRyMoDqBSqmtj/R2zBSiVxGGxFOI=
parent: !map:ActiveSupport::HashWithIndifferentAccess 
name: "Test"
gender: Male
children_attributes: !map:ActiveSupport::HashWithIndifferentAccess 
"0": !map:ActiveSupport::HashWithIndifferentAccess 
  email: 1234@testing.com
commit: Submit

从我的终端日志中的味精中,我认为这是因为children_attributes从未被保存,因为它被分配了"0"?这是终端信息:

From the msg on my terminal log, I think it's because the children_attributes never got saved as it was assigned a "0"?. This is the terminal msg:

Started POST "/parents" for 127.0.0.1 at 2011-09-14 11:14:14 -0400
Processing by ParentsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"9Pjxt7e5RRgWVGafRyMoDqBSqmtj/R2zBSiVxGGxFOI=", "parent"=>{"name"=>"123", "gender"=>"Male", "children_attributes"=>{"0"=>{"email"=>"1234@testing.com"}}}, "commit"=>"Submit"}
SQL (0.1ms)  BEGIN
SQL (0.6ms)  SELECT 1 FROM `children` WHERE (LOWER(`children`.`email`) = LOWER('1234@testing.com')) LIMIT 1
SQL (0.2ms)  ROLLBACK

控制器-

def new
  @parent = Parent.new
  @parent.children.build
end

def create
  @parent = Parent.new(params[:parent])
  if @parent.save
    redirect_to root_path
  else
    render 'new'
  end
end

父模型-

attr_accessible :children_attributes
has_many :children, :through => :parent_child_relationships

accepts_nested_attributes_for :children

子模型-

has_many :parents, :through => :parent_child_relationships
validates :email, :name, :presence => true  

父表单视图-

<%= form_for(@parent, new_parent_path) do |f| %>

<div>
  <%= f.label(:name) %></br>    
  <%= f.text_field(:name) %>
</div>  

<div>
  <%= f.label(:gender) %> <br/>
  <%= f.select(:gender, ['Male', 'Female']) %>
</div>

  <%= f.fields_for :children do |ff| %>

  <div>
    <%= ff.label(:email)%></br>
    <%= ff.text_field(:email)%>
  </div>

  <% end %>

  <%= submit_tag "Submit" %>
<% end %>

任何帮助将不胜感激!谢谢!

Any help would be greatly appreciated! Thank you!

推荐答案

检查子模型是否存在任何不成功的验证

Check if there are any unsuccessful validations for the children model

您可以使用以下类似的方法在创建时进行验证

You can validate on create, using something like below


  validates_uniqueness_of  :xxxx, :on => :create

这篇关于accepts_nested_attributes_for不将child属性保存到数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆