加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 传递对象或id

发布时间:2020-12-16 19:23:55 所属栏目:百科 来源:网络整理
导读:这只是关于最佳实践的问题. 想象一下,你有一个带一个参数的方法.此参数是对象的id.理想情况下,我希望能够直接传递对象的id,或者只传递对象本身. 这样做最优雅的方法是什么? 我想出了以下内容: def method_name object object_id = object.to_param.to_i ##
这只是关于最佳实践的问题.

想象一下,你有一个带一个参数的方法.此参数是对象的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.例如,当使用friendly id gem进行类时,可能会发生这种情况.

活动记录提供相同的功能.如果你说:无关紧要:

Table.where(user_id: User.first.id) # pass in id

要么

Table.where(user_id: User.first) # pass in object and infer id

他们是如何做到的呢?实现这种效果的最佳方法是什么?

解决方法

我的猜测是ActiveRecord做了这样的事情.或者说,我就是这样做的.
def my_method(oid)
  oid = oid.id if oid.respond_to?(:id)

  # proceed
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读