Ruby on rails 嵌套表单不工作
我有两个模型(Bcase和C_条目),我试图在每个Bcase创建表单上获得10个空白C_条目字段 我所做的是: 型号: bcase.rbRuby on rails 嵌套表单不工作,ruby-on-rails,nested-forms,Ruby On Rails,Nested Forms,我有两个模型(Bcase和C_条目),我试图在每个Bcase创建表单上获得10个空白C_条目字段 我所做的是: 型号: bcase.rb class Bcase < ActiveRecord::Base has_many :c_entries, :dependent => :destroy accepts_nested_attributes_for :c_entries end class CEntry < ActiveRecord::
class Bcase < ActiveRecord::Base
has_many :c_entries, :dependent => :destroy
accepts_nested_attributes_for :c_entries
end
class CEntry < ActiveRecord::Base
belongs_to :bcase
end
def new
@bcase = Bcase.new
10.times {@bcase.c_entries.build}
end
def bcase_params
params.require(:bcase).permit(:pimp_id, :comment_text, :status, c_entries_attributes:[:id, :description, :bcase_id])
end
def setall
@pimp = Pimp.find(params[:pimp_id])
@bcase = @pimp.bcase
end
表单(在bcase->new.html.erb中呈现)
简单的表单
<%= simple_form_for bcase_path(@pimp) do |f| %>
<%= f.error_notification %>
<%= simple_fields_for :c_entries do |ff| %>
<div class="form-actions">
<%= ff.input :description, label: false %>
<% end %>
</div>
<% end %>
NoMethodError in Bcases#new
Showing c:/Users/Public/Documents/Sites/improvement/app/views/bcases/_form.html.erb where line #1 raised:
undefined method `bcases_path' for #<#<Class:0x53efbc0>:0x4d195d0>
简单表单中@bcase的错误
<%= simple_form_for bcase_path(@pimp) do |f| %>
<%= f.error_notification %>
<%= simple_fields_for :c_entries do |ff| %>
<div class="form-actions">
<%= ff.input :description, label: false %>
<% end %>
</div>
<% end %>
NoMethodError in Bcases#new
Showing c:/Users/Public/Documents/Sites/improvement/app/views/bcases/_form.html.erb where line #1 raised:
undefined method `bcases_path' for #<#<Class:0x53efbc0>:0x4d195d0>
这显示了10个空条目!所以他们就在那里,我就是看不见他们
[#<CEntry id: nil, bcase_id: nil, order_no: 1, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 2, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 3, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 4, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 5, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 6, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 7, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 8, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 9, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 10, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>]
可能是因为指定了c_条目。但是这个解决方案看起来并不那么简单!是否可以在bcase控制器中以某种方式指定它?啊,找到了!您忘记了
=
中的,看起来不错。当然不是打字错误,你用ab
写了description
?哦,注意到了,先生。我最近把列名从description改为description,但忘了在表单和控制器中更改它!我现在改正了,但仍然不起作用。我无法解释自己遗漏了什么。看了各种各样的指南,代码都不多,所以出错的空间很小……哇,伙计,你真是天才:我欠你的!现在它工作得很好!好的,但现在我有一个问题,它只显示1个条目,而不是全部10个!在您的第一条评论中,您说它工作得很好,所以我想它不是:)您应该引用实例变量,而不是编写:bcase
。所以我更新了我的答案。对于调试,您可以包含类似于
的内容。是的,很抱歉,我太累了,以至于看到了表单字段:D我完全忘了检查它是否适用于多个条目。而不是:(由于我的bcase模型嵌套在另一个模型中,我将
更改为
,但这没有改变任何内容。您提供的调试功能无法工作,因为c_条目未保存在该状态。有没有办法使未保存的条目计数?非常感谢!使用大小
而不是计数。)(我把它们混在一起了)。如果你只写@bcase
,它能工作吗?如果你需要嵌套路由,你应该为[@pimp,@bcase]
写简单的表单(或者反过来写,不知道顺序)。我希望@bcase(@pimp)
会抛出一个错误,这甚至不是ruby:)
<%= @bcase.c_entries.each do |entry| %>
<%= entry.description %>
<% end %>
[#<CEntry id: nil, bcase_id: nil, order_no: 1, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 2, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 3, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 4, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 5, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 6, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 7, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 8, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 9, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>, #<CEntry id: nil, bcase_id: nil, order_no: 10, description: nil, hours: nil, nrc: nil, created_at: nil, updated_at: nil>]
<%= @bcase.c_entries.each do |hallo| %>
<%= f.simple_fields_for :c_entries, hallo do |fff| %>
<%= fff.input :description %>
<% end %>
<% end %>
<%= simple_form_for @bcase do |f| %>
<div class="form-inputs">
<%= f.simple_fields_for :c_entries do |entry| %>
<%= entry.input :description %>
<% end %>
</div>