【发布时间】:2013-10-08 03:45:43
【问题描述】:
我正在尝试使用 Cocoon Gem 构建嵌套表单。但是我收到如下所示的错误。我在这里找到了另一个已回答的问题Rails Cocoon Gem: Undefined Method 'new_record?' on link_to_remove_association with Wicked。但是,正如您从我的模型代码中看到的那样,唯一的答案已经被排除在外。
错误
ActionView::Template::Error (undefined method `new_record?' for nil:NilClass):
1: <div class="nested-fields">
2: <%=f.input :name%>
3: <%= link_to_remove_association "remove task", f%>
4: </div>
app/views/templates/_room_fields.html.erb:3:in `_app_views_templates__room_fields_html_erb__1867913568926009508_70125979350780'
app/views/templates/_form.html.erb:5:in `block (2 levels) in _app_views_templates__form_html_erb__4123974558704004784_70125994949300'
app/views/templates/_form.html.erb:4:in `block in _app_views_templates__form_html_erb__4123974558704004784_70125994949300'
app/views/templates/_form.html.erb:1:in `_app_views_templates__form_html_erb__4123974558704004784_70125994949300'
app/views/templates/new.html.erb:1:in `_app_views_templates_new_html_erb___3689493092838604682_70125964273280'Models
模型
class Template < ActiveRecord::Base
has_many :rooms
accepts_nested_attributes_for :rooms, :allow_destroy => true
end
class Room < ActiveRecord::Base
belongs_to :template
has_many :items
accepts_nested_attributes_for :items, :allow_destroy => true
end
class Item < ActiveRecord::Base
belongs_to :room
end
表单视图
<%= simple_form_for @template do |f| %>
<%= f.input :name%>
<div id="rooms">
<%= simple_fields_for :rooms do |room| %>
<%= render 'room_fields',:f => room %>
<%end%>
<div class="links">
<%= link_to_add_association 'add room', f, :rooms%>
</div>
</div>
<%end%>
房间部分
<div class="nested-fields">
<%=f.input :name%>
<%= link_to_remove_association "remove task", f%>
</div>
控制器
class TemplatesController < ApplicationController
def new
@template = Template.new
end
def create
end
end
【问题讨论】:
-
您是否尝试将
f替换为@template?我认为删除表单没有任何意义。 -
我试过了,但是从我阅读的代码来看,f 不应该引用@template。它的房间。
-
啊,没错。我的意思是你传递的是表单生成器而不是对象。所以尝试使用
f.object访问底层模型实例。 -
cocoon 实际上在
f上调用.object.new_record?,传递f.object也无济于事。
标签: ruby-on-rails ruby ruby-on-rails-4 cocoon-gem