【问题标题】:Not sure how this code reads不知道这段代码是如何读取的
【发布时间】:2017-05-22 16:33:09
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    def self.request 表示它是类方法,即你可以称它为Friendship.request(user1, user2)

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

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

    【讨论】:

      【解决方案2】:

      回答你的两个问题:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        • 2014-06-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多