Ruby on rails Rails中的嵌套表单问题:Show中的NoMethodError

Ruby on rails Rails中的嵌套表单问题:Show中的NoMethodError,ruby-on-rails,nested-forms,form-for,Ruby On Rails,Nested Forms,Form For,我正在尝试构建一个简单的产品待办事项应用程序来自学Rails。对于每个产品,可以有多个产品待办事项,因此我想创建一个产品视图,显示产品信息、产品的所有待办事项,并包括一个用于添加更多待办事项的嵌套表单 在我尝试将表单添加到视图之前,一切都正常,这将导致以下错误: NoMethodError in Products#show Showing app/views/products/show.html.erb where line #29 raised: undefined method `pbl

我正在尝试构建一个简单的产品待办事项应用程序来自学Rails。对于每个产品,可以有多个产品待办事项,因此我想创建一个产品视图,显示产品信息、产品的所有待办事项,并包括一个用于添加更多待办事项的嵌套表单

在我尝试将表单添加到视图之前,一切都正常,这将导致以下错误:

NoMethodError in Products#show

Showing app/views/products/show.html.erb where line #29 raised:

undefined method `pblog_ref' for #<Product:0x10423ba68>
Extracted source (around line #29):

26:   <%= f.error_messages %>
27:   <p>
28:     <%= f.label :pblog_ref %><br />
29:     <%= f.text_field :pblog_ref %>
30:   </p>
31:   <p>
32:     <%= f.label :product %><br />
此模型的架构中存在所有列:

create_table "product_backlogs", :force => true do |t|
  t.string   "pblog_ref"
  t.integer  "product_id"
  t.string   "description"
  t.string   "owner"
  t.string   "status"
  t.datetime "created_at"
  t.datetime "updated_at"
end
我已经检查了我正在做的事情,并且原则上我似乎在做和他一样的事情——只有他的嵌套注释表单有效,而我的表单无效


在我发疯之前,我希望有人能帮我!我敢肯定这是件小事。

似乎您的模型中没有
pblog\u ref
字段。看看创建products表的迁移,是否有
pblog\u ref
字段

编辑: 好吧,看来这行是错的:

<% form_for(@product, ProductBacklog.new) do |f| %>
对于某些嵌套模型,参数的
form\u总是有问题,因此我更喜欢使用
接受
的\u嵌套属性\u,然后为
创建带有
字段的子对象

在您的情况下,
的表单应如下所示:

<% form_for ProductBacklog.new, :url => new_product_product_backlog_path(@product) do |f| %>
new_product_product_backlog_路径(@product)do|f|%>

但是,我没有检查它,它可能是错误的(正如我所说,我总是对这些路径有问题)。

检查您的数据库,可能一些迁移失败,您只有部分字段

您还可以先运行脚本/控制台进行检查,然后发布“p Product.new”。它将显示一个包含所有已知字段的空产品对象,如:

#./script/console
Loading development environment (Rails 2.3.5)
>> p User.new
#<User id: nil, type: nil, login: nil, name: "", email: nil, crypted_password: nil, salt: nil, created_by_id: nil, created_at: nil, updated_at: nil, remember_token: nil, remember_token_expires_at: nil, male: true, dept_id: nil, deleted: nil>
=> nil
#/脚本/控制台
加载开发环境(Rails 2.3.5)
>>新用户
#
=>零

解决方案是更换线路:

<% form_for(@product, ProductBacklog.new) do |f| %>

与:



注意表格_后面的空格和方括号。

是的,有。很抱歉,我忘记在模式中包含表的详细信息(现在添加到上面)。所有的田地都在那里。当我取出引用pblog_ref的行时,错误移到f.text_字段:product line。感谢您的帮助。我现在设法解决了这个问题。请看下面我的答案。我已经检查了数据库,所有列都在那里。然而,当我试着做上面的事情时,我得到了以下结果。。。p、 Product.new NoMethodError:nil的未定义方法
Product:NilClass from/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/whiny_nil.rb:52:in
method_missing'from(irb):2在尝试执行p.ProductBacklog.new时相同
<% form_for(@product, ProductBacklog.new) do |f| %>
<% form_for(ProductBacklog.new) do |f| %>
<% form_for ProductBacklog.new, :url => new_product_product_backlog_path(@product) do |f| %>
#./script/console
Loading development environment (Rails 2.3.5)
>> p User.new
#<User id: nil, type: nil, login: nil, name: "", email: nil, crypted_password: nil, salt: nil, created_by_id: nil, created_at: nil, updated_at: nil, remember_token: nil, remember_token_expires_at: nil, male: true, dept_id: nil, deleted: nil>
=> nil
<% form_for(@product, ProductBacklog.new) do |f| %>
<% form_for [@product, ProductBacklog.new] do |f| %>