2017-01-08 9 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は、データベーストランザクションでクエリを実行するために使用される。transactionブロック内の2つのcreateメソッド呼び出しを留意されたい。これらはSQLを生成します挿入。
3

def self.requestは、それがクラスメソッドだ意味し、あなたがFriendship.request(user1, user2)それを呼び出すことができますすなわち。

それはそれは同じユーザーでない場合は、我々がチェック、または友情がすでに存在している。

そうでなければ、frienshipsテーブルに2つのレコードを作成し、トランザクションでラップします。私。挿入が失敗した場合 - 挿入は行われません。