Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 什么';什么是更好的做法?检索对象或对象id?_Ruby_Coding Style_Conventions_Calling Convention - Fatal编程技术网

Ruby 什么';什么是更好的做法?检索对象或对象id?

Ruby 什么';什么是更好的做法?检索对象或对象id?,ruby,coding-style,conventions,calling-convention,Ruby,Coding Style,Conventions,Calling Convention,这是一个更一般的问题。这可能是愚蠢的,但由于我一直处于这种困境,我决定问 我有一个功能(在Rails中,如果有必要的话),我想知道在编写大型应用程序时,哪种方法是最佳实践和更常见的方法 def retrieve_object(id_of_someobject) # Gets class object ID (integer) OtherObject.where('object_id = ?', id_of_someobject) end 例如,这里它接收12个作为某个对象的id 或

这是一个更一般的问题。这可能是愚蠢的,但由于我一直处于这种困境,我决定问

我有一个功能(在
Rails
中,如果有必要的话),我想知道在编写大型应用程序时,哪种方法是最佳实践和更常见的方法

def retrieve_object(id_of_someobject)
   # Gets class object ID (integer)
   OtherObject.where('object_id = ?', id_of_someobject)
end
例如,这里它接收12个作为某个对象的id


在这里,它通过触发对象属性“ID”来获取类对象和它的ID。

支持这两种方法。这只是多了一行,这样你就不必记住或在意了

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

两者都支持。这只是多了一行,这样你就不必记住或在意了

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

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

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


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

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

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


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

我个人将对象本身发送到函数。我通常发现,如果您需要修改函数并需要访问其他对象变量(不仅仅是id),那么这种方法就不那么麻烦了。就性能而言,我相信这两个选项是相同的,所以我认为这取决于个人偏好。就个人而言,我将对象本身发送到函数。我通常发现,如果您需要修改函数并需要访问其他对象变量(不仅仅是id),那么这种方法就不那么麻烦了。就性能而言,我相信这两个选项都是相同的,所以我想这可以归结为个人偏好。这种对传统的削减超过了配置参数。。。在更大的团队中,或者为了更快的周转,强迫自己和其他人以某种方式完成任务是很好的。如果你必须在每次发现之前检查这个类,这似乎有点不必要。@tyler说得很对,但我假设你在其他地方得到了一个或另一个,并且必须在那里检查。这只是授权检查。如果您必须选择,我会选择ID。这样您就可以在不首先加载someobject的情况下检索_对象(thirdobject.someobject_ID)。这种方式违反了配置参数的约定。。。在更大的团队中,或者为了更快的周转,强迫自己和其他人以某种方式完成任务是很好的。如果你必须在每次发现之前检查这个类,这似乎有点不必要。@tyler说得很对,但我假设你在其他地方得到了一个或另一个,并且必须在那里检查。这只是授权检查。如果您必须选择,我会选择ID。这样您就可以在不首先加载someobject的情况下检索对象(thirdobject.someobject\u ID)。