我熟悉如何获得典型的nested_attributes形式在铁路4中工作4仅适用于我的人模型上的嵌套属性之一。
class Person
has_many :histories
accepts_nested_attributes_for :histories
end
class History
belongs_to :person
end
查看
<% @person.histories.each do |history| %>
<% if history.created_at != nil %>
<p>Date: <%= history.created_at.strftime("%a, %b %e %Y") %></p>
<p>Visit Summary: <%= history.visit_summary %></p>
<% else %>
<p>N/A</p>
<% end %>
<% end %>
<%= form_for @person do |p| %>
<%= p.fields_for :histories do |history| %>
<%= history.label :visit_summary %>
<%= history.text_area :visit_summary %>
<% end %>
<%= p.submit 'Create History Item' %>
<% end %>
我知道我已经犯了一些视图中的逻辑错误,但是我基本上试图用这种形式来实现的是当一个人导航到/人/:id,他们看到了该人的摘要,包括与该人相关的历史。他们也有一个形式,仅在人的历史收藏中添加一个历史记录项目。
现在,为了使表格显示在视图中,我必须这样编辑我的控制器:
class PeopleController < ApplicationController
...
def show
@person = Person.find(person_params)
@person.histories.build
end
end
但是,称之为历史。建立创建一个对象,最终在视图中的历史记录项目列表中显示,即使尚未持续到数据库中,因此我用于排除其创建的历史记录项目的逻辑属性是零。另外,当我提交历史项目并将其重定向到/people/:ID时,我会呈现两个表单字段;一个用于编辑我以前创建的历史记录项目,一个创建新的历史记录项目。我只想在任何给定时间出现一个空的表单字段。
我的问题是:
1。)如何在我的人模型上显示一个小的单个属性形式。
2。)正在使用Nested_Attributes构成了它的方式?
3。)可以提供在线文档,以说明如何创建这类小型自定义表格?
非常感谢!
创建一个与人对象和形式尚未关联的新历史对象,该对象和 visit_summary
输入 post
in to histories#create
路由。在该路线中,使用输入参数创建新的历史记录,然后将其分配给它,然后保存。
本质上,仅仅因为您具有嵌套关联,并不意味着您不能仅仅创建一个历史对象。
在您的个人控制器中:
def show
@person = Person.find(person_params)
@history = History.new
end
您的表格
<%= form_for [@person, @history] do |f| %>
<%= f.label :visit_summary %>
<%= f.text_area :visit_summary %>
<%= f.submit 'Create History Item' %>
<% end %>
另外,如果您不想在form_for
方法中使用@person
,则可以使用隐藏的字段标签:
<%= form_for @history do |f| %>
<%= f.hidden_field(:person_id, value: @person.id) %>
<%= f.label :visit_summary %>
<%= f.text_area :visit_summary %>
<%= f.submit 'Create History Item' %>
<% end %>
您的历史控制器
def create
history = History.new(history_params)
history.person = Person.find(params[:person_id])
history.save
...
end