【问题标题】:How to tell if an object has a parent?如何判断一个对象是否有父对象?
【发布时间】:2015-09-17 21:48:44
【问题描述】:

只是想知道是否有解决此问题的简单方法。

我知道你可以通过@object.parent 直接找到家长 .但是,如果有@object.parent.exists?这样的东西,我会感到困惑

就我而言,@object 可以是任何模型。我想提出一个条件,以便

if @object.parent.exists?
    ... do something ...
else
    ... do something else ...
end

@object.other_parent 可能存在,因为我的@object 可以是任何东西。

【问题讨论】:

  • 您的意思是您想查看来自 any 模型的 @object 是否有 any 分配了 belongs_to 关联?
  • Wops(编辑)。我想看看 @object 是否属于父模型。例如:@object.parent1.exists? =>> false@object.parent2.exists? =>> true
  • parent1parent2 是如何定义的?您可以从模型中发布您的关联定义吗? has_manybelongs_to

标签: ruby-on-rails


【解决方案1】:

首先,如果您将parent 设置为ActiveRecord 关系,您应该可以调用:

if @object.parent

但是,如果您指的是 realms of Superclassing,即您的对象继承自“父”类,则您必须使用类似 superclass 属性的东西:

if @object.superclass

我不相信exists 将适用于此。 parent 对象要么存在,要么不存在。如果它不存在,你将根本无法调用它。

【讨论】:

    【解决方案2】:

    我猜父母是由对象模型上的parent_id 定义的。你可以在该属性上调用.nil? 来检查它是否存在

    【讨论】:

    • 你最好试试,验证然后回答。猜不着回答
    【解决方案3】:

    解决方法显然是这样的:

    @object.attributes.has_key? "parent_id"

    如果存在名为“parent”的父级,则返回 true,否则返回 false

    【讨论】:

    • 这更好地表示为@object.parent_id.present?,或者简单地表示为@object.parent_id,如果缺少parent_id,则返回nil。但是,这只会检查属性(即parent_id 列中的值),而而不是 实际关联。您的数据库可能有一个 parent_id 值引用不存在的行,该行不会被检测到。 @object.parent 将找到关联的父级(如果存在)。
    • @object.parent_id 如果@object 没有该父级,则将返回 undefined。即:@object.mom 存在(将返回 nil 或不返回)并且 @object.dad 未定义(如果您尝试这样调用它会呈现错误)。在这种情况下,我没有尝试使用 .present,但我认为在 undefined 上调用 .present 仍然会失败......
    • 呃,我们中的一个人不明白你在做什么,我希望不是我。 @object.parent_id 是 Rails 模型上的一个属性,对吗?如果是这样,如果数据库值为NULL,则返回nil。你从哪里得到@object.mom@object.dad?那些也是列吗?它们是模型中定义的方法吗?顺便说一句,.present? 是一个 Rails 方法,它是.blank? 的逆方法,所以nil.present? 返回false
    • @object.parent_id 可能是也可能不是模型的属性。其实@object可能有多种不同的型号。我感兴趣的是,@object(即object.class)的模型是否是“妈妈”的孩子。我的应用程序中的许多模型可以是妈妈的孩子,有些不是。 (有些模型有属性 mom_id,有些没有)。我想知道的是,@object 是否有妈妈的父母。 (即如果@object.mom_id 不是未定义的,它就是)
    • 好的,显然我缺乏足够的信息来发表有用的评论。如果您觉得有必要,请随意提出另一个问题,否则,祝您好运。
    猜你喜欢
    • 2011-11-28
    • 2015-03-01
    • 1970-01-01
    • 2012-12-03
    • 2012-10-16
    • 2018-05-06
    • 2021-06-07
    • 2013-08-20
    相关资源
    最近更新 更多