不确定此代码的读取方式

时间:2017-01-08 07:54:10

标签: ruby-on-rails ruby activerecord ruby-on-rails-5

我正在浏览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

2 个答案:

答案 0 :(得分:3)

def self.request表示它的类方法,即您可以将其称为Friendship.request(user1, user2)

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

如果没有,我们在frienships表中创建2条记录,包含在事务中。即如果任何插入失败 - 不会发生插入。

答案 1 :(得分:1)

回答你的两个问题:

  1. self.request表示该方法是一种类方法。它在类User.request(user_a, user_b)上调用。而实例方法(在没有self的情况下定义)通常是在User的特定实例上调用的实例方法。
  2. transaction用于在数据库事务中运行查询。请注意create块中的两个transaction方法调用。它们生成SQL插入。