我遇到了类似的问题 has_many nested form with a has_one nested form within it
基本上尝试在创建客户端的同时创建任务,其中一些任务可能会重复出现,这些任务通过与重复模型的has_one关系来处理。
所以
客户端模型
attr_accessible :tasks_attributes
has_many :tasks, dependent: :destroy
accepts_nested_attributes_for :tasks, :allow_destroy => true, :reject_if => lambda { |t| t['task_type'].blank? }
任务模型
belongs_to :client
has_one :recurring, :dependent => :destroy
accepts_nested_attributes_for :recurring, :reject_if => lambda { |t| t['recurring_type'].blank? }
attr_accessible :recurring_attributes
Clients_controller
def new
@client = Client.new
@task = @client.tasks.build
客户端/ _form
<table id="tasks" class="table table-striped">
<%=f.simple_fields_for :tasks, :wrapper => false do |task|%>
<tr class="fields>
<td><%=task.input :task_type, :label => "Task Type", :collection => Task::TASK_TYPES %></td>
<td>
<%= task.simple_fields_for :recurring, @task.build_recurring do |recur|%>
<%= recur.input :recurring_type, :as => :select, :collection => Recurring::RECUR_TYPES %>
<%end%>
</td>
<td><%= task.input :due_date, :as => :datepicker, :label => "Next Due Date"%></td>
<td><%= task.link_to_remove "Remove this task" %></td>
<%end%>
</tr>
</table>
<%= f.link_to_add "Add a task", :tasks, :data => { :target => "#tasks" } %>
我可以让表单正确显示,现在可以正确添加和删除任务。 但是当我提交时,我得到了一个
undefined method `build_recurring' for nil:NilClass
我现在正在尝试以不同的方式做到这一点,这让我感到疯狂。
任何想法我做错了什么?
答案 0 :(得分:1)
问题来自reject_if。它拒绝了错误发生时的空白字段,因此该字段未显示。
删除reject_if for blank可以更改为nil,之后验证可以作为处理的常规验证处理。