nil的未定义方法`number':NilClass

时间:2016-09-18 01:24:56

标签: ruby-on-rails ruby

我在belongs_to关系中显示属性时遇到问题。租赁belongs_to单位。单元在db中有一列“number”。当我尝试在租赁显示页面上显示这个属性时,它给出了nil:NilClass的未定义方法“number”的错误。我觉得我在做一些愚蠢的事情,而不是看着它。

lease.rb

belongs_to :unit

unit.rb

has_many :leases

leases_controller.rb

  def show
    @lease = Lease.find(params[:id])
  end

视图/租赁/ show.html.erb

<%= @lease.unit.number %>

如果我将显示页面代码更改为@ lease.unit_id,它将显示该单元的ID。这是我的数据库的图片,显示了Unit_id。 enter image description here

2 个答案:

答案 0 :(得分:1)

您的模型可能包含unit_id属性,但是units的{​​{1}}与id = 1没有该记录有什么关系?

快速(脏)修复:

<%= @lease.unit.number unless @lease.unit.nil? %>

答案 1 :(得分:1)

您必须验证单位ID在租赁模型中的存在

validates :unit, presence: true

所以除非你将unit_id设置为Lease实例,否则你的租赁模型不会保存到数据库

现在您可以从数据库中删除现有的单位记录,然后重新开始。

您可能需要为每个数据添加更多完整性,请阅读this

更新

确定“DBA在某些情况下删除记录”怎么样?

您可以将Unit#号委托给Lease instance

delegate :number, to: :unit, prefix: true

现在您可以访问lease.unit.number,即使unit_id为nil,您也可以使用lease.unit_number

访问它