self.class.where如何从数据库中检索信息?

时间:2013-12-14 03:47:51

标签: ruby-on-rails

从数据库中检索信息的一种面向对象的方法是使用链接在一起的这三种方法。

您可以创建如下的实例方法:

def "find_friend"
    self.class.where({friend_id: user_id})
end

然后像这样调用它:

# @user_friendship == <UserFriendship id: 1, friend_id: 2, user_id: 1>

@user_friendship.find_friend

如果我们有这样的user_friendships表:

| id | friend_id | user_id |

| 1  | 1         | 3       |
| 2  | 2         | 1       |
| 3  | 3         | 2       |

然后find_friend方法将返回第二条记录(id为2的记录)

@user_friendship.find_friend #=> <UserFriendship id: 2, friend_id: 2, user_id: 1>

现在,首先我的理解是正确的吗?

其次,这实际上是如何运作的? self.class.inspect只返回看似是模型表模式的哈希的内容:

self.class.inspect #=> `UserFriendship(id: integer, friend_id: integer, user_id: integer)`

那么如何在这个简单的哈希上运行查询呢?

self.class.where({friend_id: user_id})

1 个答案:

答案 0 :(得分:0)

类方法在哪里可以这样调用。

UserFriendship.where({friend_id: user_id})

每个Ruby对象都知道它自己的类类型,因此self.class.where({friend_id: user_id})是同一个东西。 self.class解析为UserFriendship,然后您可以调用where方法传递键值对的散列值以撤回所需的记录。