如何修复“未定义方法“空”?对于#<contactinformation:0x007fc8be45cc98>:错误?

时间:2019-02-16 09:10:25

标签: ruby-on-rails controller associations

我在has_many associationuser之间有contact_information。我向contact_information添加了两列,分别为address_oneaddress_two。然后将用户和contact_information之间的关联更改为has_one关联。但是我得到的错误是: undefined method是空的吗?”为#`

在app / models / concerns / user_associations.rb中:

    has_many :contact_informations,
     -> { where(address_one: nil, address_two: nil) },
      as: :user

已更改为

    has_one :contact_information,
     -> { where(address_one: nil, address_two: nil) },
      as: :user

然后在ContactInformationsController中,将contact_informations更改为contact_information。我在ContactInformationsController#show中遇到以下错误:

  def show
    if @user.contact_information.empty?
      redirect_to new_contact_information_path
    else
      redirect_to edit_contact_information_path
    end
  end

@user.contact_informations.empty?已更改为@user.contact_information.empty?。但是当我尝试访问该页面时,

NoMethodError - undefined method是空的吗?”为#`

我在INTERNET上查找了类似的问题,其中大多数人说将其转换为.to_s。但这并不能解决我的问题

存在contact_information的对象。那么,为什么在.empty?上却出错?可以请任何人解释一下吗?

谢谢

1 个答案:

答案 0 :(得分:0)

empty?方法是在可枚举对象(包括活动记录关系)上定义的,但未在单个ActiveRecord对象(如ContactInformation实例)上定义。如果要检查关联的存在,只需执行以下操作:

if @user.contact_information
  redirect_to edit_contact_information_path
else
  redirect_to new_contact_information_path
end