我在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。
答案 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