我是Ruby的初学者。我在下面提供了一个代码片段,我想知道它的语法含义。我知道语义,从某种意义上说,我可以运行全长代码,看看会发生什么。但我对语言结构本身并不清楚。
class Product < ActiveRecord::Base
include ActsAsTree
self.primary_key = 'id'
acts_as_tree foreign_key: 'product_id'
问题如下:
ActiveRecord
是ActiveRecord
gem提供的模块吗? ActiveRecord::Base
模块中包含ActiveRecord
类吗?primary_key
属于ActiveRecord::Base
类?acts_as_tree
是宝石的名称。为什么它在声明之前?到底是什么foreign_key: 'product_id'
?为什么中间有冒号(:)分隔符?该陈述代表什么语言结构?答案 0 :(得分:1)
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb
foreign_key: 'blah'
只是:foreign_key=>'blah
的一个奇特的符号。括号是隐含的,它也是隐含的事实答案 1 :(得分:1)
是ActiveRecord是ActiveRecord gem提供的模块
Base是ActiveRecord模块中包含的类。
默认情况下,activerecord将表中的id列视为主键。 如果我们在表中有不同名称的主键,那么我们使用self.primary_key来通知activerecord主键。 primary_key是一个类方法。你可以在这里查看http://apidock.com/rails/ActiveRecord/AttributeMethods/PrimaryKey/ClassMethods/primary_key。您还可以检查源代码以更好地理解该方法的编写方式。
acts_as_tree是一个宝石名称,这个宝石中定义了acts_as_tree类方法。 acts_as_tree foreign_key:&#39; product_id&#39; line只是用参数调用acts_as_tree方法(foreign_key:&#39; product_id&#39;)。上面的行等同于acts_as_tree(foreign_key:&#39; product_id&#39;)或acts_as_tree(:foreign_key =&gt;&#39; product_id&#39;)。该函数的参数是一个Hash对象。 Hash是ruby中的一个类。
在开始编写代码之前,先了解一些关于ruby的基本知识。你可以从http://www.tutorialspoint.com/ruby/
开始