Ruby on rails Rails中的嵌套表单问题:Show中的NoMethodError
我正在尝试构建一个简单的产品待办事项应用程序来自学Rails。对于每个产品,可以有多个产品待办事项,因此我想创建一个产品视图,显示产品信息、产品的所有待办事项,并包括一个用于添加更多待办事项的嵌套表单 在我尝试将表单添加到视图之前,一切都正常,这将导致以下错误: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
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| %>