如何解决错误(未定义方法`name' for nil:NilClass)

时间:2016-02-17 08:08:48

标签: ruby-on-rails ruby-on-rails-3 activerecord

我收到此错误,如何解决此关系错误

enter image description here

我有一个名为property.rb

的模型
class Property < ActiveRecord::Base
    belongs_to :rm
    belongs_to :category
end

我也有category.rb

class Category < ActiveRecord::Base
    has_many :rms,dependent: :destroy
    has_many :properties,dependent: :destroy
end

我的RM(关系经理)模型是

class Rm < ActiveRecord::Base
  acts_as :user
  belongs_to :category
  has_many :properties
end

在我的控制器中我列出了这样的属性

class Rms::PropertiesController < ApplicationController
  before_filter :authenticate_user!
  before_action :set_property, only: [:show, :edit, :update, :destroy]
  def index
    @properties = Property.all
  end
 def property_params
 params.require(:property).permit(:seller_name,:rm_id,:category_id,:property_type_id,:seller_email,:seller_phone,:property_name)
  end
end

在我的视图页面中 我列出了RM在index.html.erb

中添加的属性
    <% @properties.each do |property| %>
      <tr>
        <td><%= property.seller_name %></td>
        <td><%= property.seller_email %></td>
        <td><%= property.seller_phone %></td>
        <td><%= property.category.name %></td>
        <td><%= property.property_name %></td>
   <% end %>

4 个答案:

答案 0 :(得分:2)

  

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

这是因为其中一个property没有关联category。立即修复将使用try方法。

<%= property.category.try(:name) %>

答案 1 :(得分:1)

确保category始终与property相关联。

在物业模型中添加:

validates :category, presence: true

如果您的产品不一定总是有类别,您可以使用安全导航(这几乎总是一个丑陋的解决方案):

product.category.try(:name) # Ruby <  2.3.x
product.category&.name      # Ruby >= 2.3.x

答案 2 :(得分:1)

这是因为 for (int[] a : array) { String str = Arrays.toString(a); System.out.println(str.substring(1, str.length()-1).replaceAll("[,]", "")); } 没有property与之关联。 所以

category

抛出错误

  

未定义的方法`name&#39;为零:NilClass

因为{0}不存在nil类,在本例中为<td><%= property.category.name %></td> 您可以使用名为name的gem来处理此类情况。 安装gem之后,只需将代码重写为:

category

答案 3 :(得分:1)

可能属性没有类别。尝试使用:

<%= property.category.name rescue nil%>