表格列:
检查控制器
class InspectionsController < ApplicationController
def index
@inspections = Inspection.all
end
检验模型
class Inspection < ApplicationRecord
belongs_to :acordo
end
Acordo模型
class Acordo < ApplicationRecord
has_many :inspections, dependent: :destroy
我想要一个Acordo有很多检查。
在检索索引视图中,我想显示Acordo.created_at属性。
我该怎么做? 我尝试了类似的东西,但它不起作用
<% @inspections.each do |inspection| %>
<%= inspection.acordo.created_at %>
我收到了这个错误:
NoMethodError in Inspections#index
undefined method `created_at' for nil:NilClass
我错过了什么吗?
答案 0 :(得分:2)
好像您的数据库var json = {
'offices': [{
"home_id": "1",
"price": "925",
"sqft": "1100",
"num_of_beds": "2",
"num_of_baths": "2.0",
"types": {
"0": "Internet",
"1": "msn",
"2": "aol"
}
}, {
"home_id": "2",
"price": "1425",
"sqft": "1900",
"num_of_beds": "4",
"num_of_baths": "2.5",
"types": {
"0": "Internet",
"1": "google",
"2": "virgin"
}
}]
}
var theOffices = json.offices;
var result = $.grep(theOffices, function (h) {
return h.home_id == 1
&& h.price == 925
});
console.log(result)
没有inspections
。
错误:
Inspections#index中的NoMethodError 未定义的方法`created_at&#39;为零:NilClass
...表示acordo
(不是对象),当您想要inspection.acordo == nil
时,它会警告它不是可以返回字段{{1}的getter的正确对象}
我的意思是关系没问题,但在created_at
的一个(或多个)中,created_at
但inspection
表中的acordo_id
相同{。}}。
尝试检查关系中是否有acordo
:
id
或制作一些批处理作业(并放入调度程序),找到不属于任何acordo的格式错误的检查并删除它们或将它们移动到表acordo
(为了数据一致性)。
答案 1 :(得分:1)
您可能有一个混乱的数据库,在添加检查和acordo之间的关系之前,您是否有任何检查条目?检查数据库并检查是否有任何空的acordo_id列检查。其他答案是正确的,您应该在读取nil对象上的属性之前检查关系inspection.acordo是否存在。
答案 2 :(得分:0)
尝试将ApplicationRecord
更改为ActiveRecord::Base
,这就是我用来建立关系的方式。如果这样可以解决您的问题,请告诉我。
class Inspection < ActiveRecord::Base
belongs_to :acordo
end
class Acordo < ActiveRecord::Base
has_many :inspections, dependent: :destroy