ruby-on-rails – rails fields_for和嵌套属性
我很难理解如何使用fields_for和嵌套属性.为了更好地理解它,我创建了一个
repo,这是行不通的.
我读了this,这没什么用. 我在用: Rails 4.0.1 题: >地址表单显示,为什么无法保存到数据库? jack = Person.create(姓名:’杰克’) jack.address.create(街道:’12w 33st’) 主要功能如下: #model class Person < ActiveRecord::Base has_one :address accepts_nested_attributes_for :address end class Address < ActiveRecord::Base belongs_to :person end 查看如下: <%= form_for(@person) do |f| %> <% if @person.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@person.errors.count,"error") %> prohibited this person from being saved:</h2> <ul> <% @person.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= f.label :name %><br> <%= f.text_field :name %> </div> <div class="field"> <%= f.label :age %><br> <%= f.text_field :age %> </div> <div class="field"> <%= f.label :gender %><br> <%= f.text_field :gender %> </div> <%= fields_for :address do |address_fields|%> Street: <%= address_fields.text_field :street%> Zip code: <%= address_fields.text_field :zip_code%> <% end %> <div class="actions"> <%= f.submit %> </div> <% end %> nested attributes 结论: > has_one关系不支持person.address.create.这只适用于has_many 解决方法
尝试:
jack = Person.create(name: 'Jack') jack.create_address(street: '12w 33st') 当只有一个关联地址(has_one:address)时,使用create_address.当有许多关联地址(has_many:地址)时,您使用addresses.create. 此外,在您的视图中,您将需要f.fields_for而不是fields_for. 我建议查看RailsCasts for Nested Model Form以了解更多信息. 附加信息(以解决以下评论) 另请注意,create将生成一个新对象并尝试将其保存在数据库中. build将只构建新对象.在你的PeopleController中,你需要这样的东西: def new @person = Person.new @person.build_address end 根据您的需要,您可以确定是否希望此构建在模型中的其他操作或回调中发生.但是,这将让你开始. 您还需要将person_params更新为 def person_params params.require(:person).permit(:name,:age,:gender,address_attributes: [:id,:street,:zip_code]) end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |