有关编辑嵌套表单的问题

时间:2015-11-12 08:22:18

标签: ruby-on-rails

我正在使用simple_form,这是一个已知的Rails gem,它使表单更容易一些。我无法编辑表单。我可以完美地保存记录,但是当我转到edit操作时,我没有从数据库中看到嵌套对象的记录。

模型

# app/models/user.rb
has_one :member
has_one :academic, through: :member

accepts_nested_attributes_for :member, reject_if: :all_blank 

# app/models/member.rb
belongs_to :user

has_one academic, dependent: :delete
accepts_nested_attributes_for academic, allow_destroy: true, reject_if: :all_blank

# app/models/academic.rb
belongs_to :member

控制器

# app/controllers/member_controller.rb

def edit
 @member = Member.find(params[:id])
 @academic = Academic.find_by_member_id(params[:id])

 @member.build_academic
 @member.academic.build_exchange_student # ExchangeStudent belongs_to :academic also
end

查看

# app/views/_form.html.erb partial on app/views/edit.html.erb
<%= simple_form_for @member, url: database_members_path do |f| %>

<%= f.fields_for :academic do |academic_exchange_student| %>
  <%= academic_exchange_student.fields_for :exchange_student do |exchange| %>

<!-- ##### Exchange student -->
  <div class="row">
      <%= academic_exchange_student.text_field :major%>
  </div>

<% end %>
 <% end %>

是的,我允许ids中的params.require(...)。记录保存完好,我可以在rails console中看到。

当我转到此edit页面时,我可以看到text_field中已有成员的信息,但我看不到@member.academic.major的信息。< / p>

此外,如果我转到编辑页面并在浏览器中返回,则会隐藏academic记录。

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

1 个答案:

答案 0 :(得分:1)

我想这里的问题是你在编辑视图中构建了一个新的academic对象,而academic模型中只能有一个User

我建议你只有在新学术不存在的情况下才能建立它:

def edit
  @member = Member.find(params[:id])

  @member.build_academic unless @member.academic
  @member.academic.build_exchange_student unless @member.academic.exchange_student
end

PS:你也不需要@academic变量,除非它没有在编辑视图中的其他地方使用过。