我正在浏览github查看很酷的代码,但不明白这段代码的作用:
我知道有2个belongs_to关联,但我不明白'self.request'方法的含义及其作用。
另外,“事务”不是用于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
答案 0 :(得分:3)
def self.request
表示它的类方法,即您可以将其称为Friendship.request(user1, user2)
。
在其中我们检查它是否不是同一个用户,或者友谊已经存在。
如果没有,我们在frienships
表中创建2条记录,包含在事务中。即如果任何插入失败 - 不会发生插入。
答案 1 :(得分:1)
回答你的两个问题:
self.request
表示该方法是一种类方法。它在类User.request(user_a, user_b)
上调用。而实例方法(在没有self
的情况下定义)通常是在User
的特定实例上调用的实例方法。transaction
用于在数据库事务中运行查询。请注意create
块中的两个transaction
方法调用。它们生成SQL插入。