如何在多个关系中显示属性? - RoR

时间:2016-08-20 00:38:18

标签: ruby-on-rails

表格列:

enter image description here

检查控制器

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

我错过了什么吗?

3 个答案:

答案 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_atinspection表中的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