【发布时间】:2015-07-15 23:00:42
【问题描述】:
您好,我有一个带有栏杆和茧的嵌套表单。我测试了所有东西几个小时,并尝试了相关主题的所有建议,但没有任何效果。这是我的设置:
student.rb(学生模型)
has_many :parents, dependent: :destroy
accepts_nested_attributes_for :parents,
reject_if: proc { |attributes|
attributes['first_name'].blank? },
:allow_destroy => true
学生/new.html.erb
<div class="content <% if !@active_tab %> active <% end %>" id="tabStudent">
<%= form_for @student, validate: true do |student| %>
<%= render 'student_fields', model: student %>
<%= hidden_field(:active, 'tab', value: @active_tab) %>
</div>
<div class="content <% if @active_tab === 'tabParents' %> active <% end %>" id="tabParents">
<h2>Parents</h2>
<div id="parents">
<%= student.fields_for :parents do |parent| %>
<%= render partial: 'parent_fields', locals: {include_mode: 'new', f: parent, added_by: ''} %>
<% end %>
<%= link_to_add_association 'add', student, :parents,
render_options: { locals: {include_mode: 'new', added_by: 'rails'}},
'data-association-insertion-node' => '#parents',
'data-association-insertion-method' => 'append' %>
</div>
</div>
students_controller.rb
def create
@student = Student.new(student_params)
@student.parents.build
if @student.save
flash[:success] = "Success"
redirect_to @student
else
render 'new'
end
end
private
def student_params
params.require(:student).permit(:first_name, :last_name, :gender,
parents_attributes: [:id, :first_name, :last_name, :gender, :_destroy])
end
学生/_parent_fields.html.erb
<div class="nested-fields">
<div class="row links">
<div class="large-12 columns right">
<%= link_to_remove_association raw('<i style="color:#ff0000;" class="fi-x-circle"></i>'), f %>
</div>
</div>
<div class="row">
<fieldset>
<legend>Data</legend>
<div class="row">
<div class="large-3 columns field">
<%= f.label :gender, 'Student Gender' %>
<%= f.select(:gender, [['male', 'm'], ['female', 'f']]) %>
</div>
<div class="large-3 columns field">
<%= f.label :first_name, 'First Name' %>
<%= f.text_field :first_name %>
</div>
<div class="large-3 columns field">
<%= f.label :last_name, 'Last Name' %>
<%= f.text_field :last_name %>
</div>
</fieldset>
</div>
</div>
到目前为止,我可以添加和删除表单字段,但是当我发送它时,只有第一个父项保存到数据库中。如果我使用“添加”链接添加第二个父级,则会将空记录保存到数据库中。第二种形式也没有出现在发布数据中,所以记录为空也就不足为奇了,但我就是不知道为什么数据没有正确传输。
编辑:我找到了问题所在。我对 css 样式使用遏制基础,而对于嵌套形式,我使用它们的“选项卡”:
<div class="tabs-content">
<div class="content <% if !@active_tab %> active <% end %>" id="tabStudent">
<%= form_for @student, validate: true do |student| %>
<%= render 'student_fields', model: student %>
<%= hidden_field(:active, 'tab', value: @active_tab) %>
</div>
<div class="content <% if @active_tab === 'tabParents' %> active <% end %>" id="tabParents">
<h2>Parents</h2>
<div id="parents">
<%= student.fields_for :parents do |parent| %>
<%= render partial: 'parent_fields', locals: {include_mode: 'new', f: parent, added_by: ''} %>
<% end %>
<%= link_to_add_association 'new', student, :parents,
render_options: { locals: {include_mode: 'new', added_by: 'rails'}},
'data-association-insertion-node' => '#parents',
'data-association-insertion-method' => 'append' %>
</div>
</div>
嵌套的 div 似乎破坏了茧的功能。如果我删除它的工作原理。还有人知道我如何制定一个允许我使用标签的解决方案吗?
【问题讨论】:
标签: ruby-on-rails nested-forms cocoon-gem