Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 你有一个和很多不同吗?_Ruby On Rails_Ruby On Rails 3_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails 你有一个和很多不同吗?

Ruby on rails 你有一个和很多不同吗?,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.2,我有两种型号: class Product < ActiveRecord::Base attr_accessible :amount, :name, :unit, :description, :stock, :limit has_many :cart_rows has_one :inquery end 及 在Inqueries视图的索引中,我有: <% @inqueries.each do |inquery| %> <%= inquery.product

我有两种型号:

class Product < ActiveRecord::Base
  attr_accessible :amount, :name, :unit, :description, :stock, :limit
  has_many :cart_rows
  has_one :inquery
end

在Inqueries视图的索引中,我有:

<% @inqueries.each do |inquery| %>
  <%= inquery.product.name %>
  <%= inquery.text %>
<% end %>
我得到以下错误:nil:NilClass的未定义方法'name'


我做错了什么?一个人的行为是否与许多人的行为不同?

不,您应该能够调用inquery.product。您可能有一个没有产品的inquery

在控制台rails c中,运行:Inquery.whereproduct_id:nil,然后查看是否得到结果

您应该在Inquery模型中验证产品的存在性:

validates :product, presence: true

不,您应该能够调用inquery.product。您可能有一个没有产品的inquery

在控制台rails c中,运行:Inquery.whereproduct_id:nil,然后查看是否得到结果

您应该在Inquery模型中验证产品的存在性:

validates :product, presence: true

您的Inquery没有附加产品


当您调用inquery.product时,您返回的是一个nil值,然后在nil值上调用.name时,您得到的是错误。这与“有一个”或“有多个”无关。您的Inquery没有附加产品


当您调用inquery.product时,您返回的是一个nil值,然后在nil值上调用.name时,您得到的是错误。这与“有一个”或“有多个”无关。我根据您在这里描述的信息构建了一个应用程序,并且能够通过使用Inquery记录再现您的问题,该记录的产品值为零,文本值也为零。您可能希望添加更好的验证器,以便不能保存带有nils的inquery

下面是我的rails控制台会话的粘贴:

  Inquery Load (0.1ms)  SELECT "inqueries".* FROM "inqueries" 
#<Inquery:0x00000002c03e40>
 => [#<Inquery id: 1, text: nil, phone: nil, zip: nil, product_id: nil, state: nil, street: nil, city: nil, created_at: "2012-08-17 15:23:49", updated_at: "2012-08-17 15:23:49">] 

1.9.3p194 :002 > Inquery.all.each { |n| puts n.product.name }
  Inquery Load (0.2ms)  SELECT "inqueries".* FROM "inqueries" 
NoMethodError: undefined method `name' for nil:NilClass

顺便提一句,现在我们来听听一些不请自来的建议:一个与关键字text同名的字段是一个非常糟糕的主意。你今天可能不会射中自己的脚,但总有一天会的。考虑将文本字段重命名为用户文本或描述或类似的东西。

< P>我根据您所描述的信息构建了一个应用程序,并且能够通过对产品也有文本的无记录值的查询记录来重现您的问题。您可能希望添加更好的验证器,以便不能保存带有nils的inquery

下面是我的rails控制台会话的粘贴:

  Inquery Load (0.1ms)  SELECT "inqueries".* FROM "inqueries" 
#<Inquery:0x00000002c03e40>
 => [#<Inquery id: 1, text: nil, phone: nil, zip: nil, product_id: nil, state: nil, street: nil, city: nil, created_at: "2012-08-17 15:23:49", updated_at: "2012-08-17 15:23:49">] 

1.9.3p194 :002 > Inquery.all.each { |n| puts n.product.name }
  Inquery Load (0.2ms)  SELECT "inqueries".* FROM "inqueries" 
NoMethodError: undefined method `name' for nil:NilClass

顺便提一句,现在我们来听听一些不请自来的建议:一个与关键字text同名的字段是一个非常糟糕的主意。你今天可能不会射中自己的脚,但总有一天会的。考虑将文本字段重命名为USER文本或描述或类似的东西。

技术上:文本而不是文本,但是使用一个类型作为变量名是令人困惑的,不管我们是在讨论“文本”还是“字符串”还是“整数”。好吧,它不是一个真正的关键字,它只是碰巧是一个列类型的选项之一。。。无论如何,我同意他可以选择一个更具描述性的名字,比如description。但除此之外,我认为这不会引起任何问题。这太棒了!JD,你说得对。我在数据库中有一些旧数据。另外,我也很感激你主动提出的建议。我会改变的!从技术上讲:text而不是text是,但无论我们谈论的是“text”还是“string”或“integer”,使用类型作为变量名都会让人困惑。好吧,它不是一个真正的关键字,它只是碰巧是一个列类型的选项之一。。。无论如何,我同意他可以选择一个更具描述性的名字,比如description。但除此之外,我认为这不会引起任何问题。这太棒了!JD,你说得对。我在数据库中有一些旧数据。另外,我也很感激你主动提出的建议。我会改变的!