Ruby on rails 不确定这段代码是如何读取的
我正在浏览github,查看一些很酷的代码,但不理解这些代码的作用: 我知道有2个属于关联,但我不明白“self.request”方法的含义和作用 另外,“事务”不是用于SQL数据库查询而不是ruby代码吗 有人能澄清一下吗Ruby on rails 不确定这段代码是如何读取的,ruby-on-rails,ruby,activerecord,ruby-on-rails-5,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 5,我正在浏览github,查看一些很酷的代码,但不理解这些代码的作用: 我知道有2个属于关联,但我不明白“self.request”方法的含义和作用 另外,“事务”不是用于SQL数据库查询而不是ruby代码吗 有人能澄清一下吗 class Friendship < ActiveRecord::Base belongs_to :friend, :class_name => "User", :foreign_key => "friend_id" belongs_to :use
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
类友谊“User”,:foreign\u key=>“friend\u id”
属于:用户
def自我请求(用户、朋友)
除非user==朋友或友谊。存在?(用户,朋友)
事务处理
创建(:user=>friend,:friend=>user,:status=>requested')
创建(:user=>user,:friend=>friend,:status=>pending')
结束
结束
结束
要回答您的两个问题:
self.request
表示该方法是类方法。在类上调用它,如User.request(User\u a,User\u b)
。而实例方法(定义时没有self
)通常是在用户的特定实例上调用的实例方法
transaction
用于在数据库事务中运行查询。请注意transaction
块中的两个create
方法调用。它们生成SQL插入def self.request
表示它是class方法,也就是说,你可以称它为Friendly.request(user1,user2)
在其中,我们检查它是否不是同一个用户,或者友谊是否已经存在
如果没有,我们将在frienships
表中创建两条记录,包装在事务中。即,如果任何插入失败,则不会发生插入