2017-01-08 4 views
2

Я просматриваю GitHub глядя на прохладном коде, но не понимаю, что делает этот код:Не уверен, как этот код читает

Я понимаю, что есть 2 BELONGS_TO ассоциации, но я не понимаю, что Метод «self.request» означает и что он делает.

Кроме того, это не транзакция, предназначенная для запросов к базе данных SQL, а не для рубинового кода?

Не могли бы вы прояснить ситуацию?

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

Чтобы ответить на два вопроса:

  1. self.request означает, что метод является методом класса. Он называется классом, как User.request(user_a, user_b). В то время как методы экземпляра (определяемые без self обычно метод экземпляра, которые называются на конкретном экземпляре User.
  2. transaction используется для выполнения запросов в течение транзакций базы данных. Обратите внимание на два create метод вызывает в transaction блоке. Они генерируют SQL вставки.
3

def self.request означает, что это метод класса, то есть вы можете назвать это Friendship.request(user1, user2).

В ней мы проверяем, если это не тот же пользователь, или дружба уже существует.

Если нет, мы создаем 2 записи в таблице frienships, завернутой в транзакцию. То есть если какая-либо вставка не удалась - нет вставки.

Смежные вопросы