不确定这段代码如何读取

Not sure how this code reads

我正在浏览 github 看很酷的代码,但不明白这段代码的作用:

我知道有 2 个 belongs_to 关联,但我不明白 'self.request' 方法的含义和作用。

此外,'transaction' 不是用于 SQL 数据库查询而不是 ruby 代码吗?

有人可以澄清一下吗?

class Friendship < ActiveRecord::Base
  belongs_to :friend, :class_name => "User", :foreign_key => "friend_id"
  belongs_to :user


   def self.request(user, friend)
      unless user == friend or Friendship.exists?(user, friend)
          transaction do
              create(:user => friend, :friend => user, :status => 'requested')
              create(:user => user, :friend => friend, :status => 'pending')
          end
      end
  end

回答你的两个问题:

  1. self.request 表示该方法是 class 方法。它在 class 上被称为 User.request(user_a, user_b)。而实例方法(未定义 self 通常是在 User.
  2. 的特定实例上调用的实例方法
  3. transaction 用于在数据库事务中运行 查询。请注意 transaction 块中的两个 create 方法调用。他们生成 SQL 插入。

def self.request 表示它是 class 方法,即你可以调用它 Friendship.request(user1, user2).

其中我们检查是否不是同一个用户,或者友谊已经存在。

如果没有,我们在 frienships table 中创建 2 条记录,包裹在交易中。 IE。如果任何插入失败 - 不会发生插入。