这只是一个关于最佳实践的问题。
想象一下,您有一个采用一个参数的方法。这个参数是一个对象的id。理想情况下,我希望能够直接传递对象的 id,或者只传递对象本身。
最优雅的方法是什么?
我想出了以下内容:
def method_name object
object_id = object.to_param.to_i
### do whatever needs to be done with that object_id
end
因此,如果参数已经是一个 id,它几乎保持不变;如果它是一个对象,它会得到它的 id。
这行得通,但我觉得这可能会更好。此外,to_param 返回一个字符串,在某些情况下它可能返回一个“真实”字符串(即“字符串”而不是“2”),因此在对其调用 to_i 时返回 0。例如,当对类使用友好的 id gem时,可能会发生这种情况。
活动记录提供相同的功能。没关系,如果你说:
Table.where(user_id: User.first.id) # pass in id
或者
Table.where(user_id: User.first) # pass in object and infer id
他们是怎么做到的呢?实现这种效果的最佳方法是什么?