我正在使用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
记录。
任何帮助将不胜感激。谢谢。
答案 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
变量,除非它没有在编辑视图中的其他地方使用过。