不确定这段代码如何读取
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
回答你的两个问题:
self.request
表示该方法是 class 方法。它在 class 上被称为 User.request(user_a, user_b)
。而实例方法(未定义 self
通常是在 User
. 的特定实例上调用的实例方法
transaction
用于在数据库事务中运行 查询。请注意 transaction
块中的两个 create
方法调用。他们生成 SQL 插入。
def self.request
表示它是 class 方法,即你可以调用它 Friendship.request(user1, user2)
.
其中我们检查是否不是同一个用户,或者友谊已经存在。
如果没有,我们在 frienships
table 中创建 2 条记录,包裹在交易中。 IE。如果任何插入失败 - 不会发生插入。
我正在浏览 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
回答你的两个问题:
self.request
表示该方法是 class 方法。它在 class 上被称为User.request(user_a, user_b)
。而实例方法(未定义self
通常是在User
. 的特定实例上调用的实例方法
transaction
用于在数据库事务中运行 查询。请注意transaction
块中的两个create
方法调用。他们生成 SQL 插入。
def self.request
表示它是 class 方法,即你可以调用它 Friendship.request(user1, user2)
.
其中我们检查是否不是同一个用户,或者友谊已经存在。
如果没有,我们在 frienships
table 中创建 2 条记录,包裹在交易中。 IE。如果任何插入失败 - 不会发生插入。