1

这是一个更普遍的问题。这可能很愚蠢,但因为我经常遇到这种困境 - 决定问。

我有一个函数(Rails如果重要的话),我想知道哪种方法是最佳实践,并且在编写大型应用程序时更常见。

def retrieve_object(id_of_someobject)
   # Gets class object ID (integer)
   OtherObject.where('object_id = ?', id_of_someobject)
end

例如,这里接收 12 作为id_of_someobject

或者

def retrieve_object(someobject)
   # Gets class object
   OtherObject.where('object_id = ?', someobject.id)
end

在这里,它通过触发对象属性'id'来获取类对象并获取其ID。

4

2 回答 2

1

在这种情况下,我更喜欢第二种方法。它们在功能上可能是等效的,但是如果出现错误(例如调用 nil.id),在函数中处理它更有意义,以便在发生故障时更容易调试。

对于第一种方法,传入 nil 不会导致错误,而是会返回一个空数组。所以可能很难知道为什么你的结果不是你所期望的。第二种方法会抛出一个标志并告诉您该错误的确切位置。如果你想通过返回一个空数组来处理这种情况,你可以明确地这样做。

正如 Michael 所提到的,传递整个对象还可以让您灵活地执行其他操作,如果您愿意的话。我没有看到评估 id 然后将其传递给方法有很多好处,除非您已经拥有该 ID 而无需实例化对象。(对于第一个选项,这将是一个引人注目的用例)

于 2013-07-26T21:32:59.060 回答
0

两者都支持。它只是多行,这样你就不必记住或关心。

def retrieve_object(id_or_someobject)
   id = id_or_someobject.is_a?(SomeObject) ? id_or_someobject.id : id_or_someobject
   OtherObject.where('object_id = ?', id)
end
于 2013-07-26T20:29:34.437 回答