Ruby语法的混乱

时间:2015-05-19 19:51:02

标签: ruby

我是Ruby的初学者。我在下面提供了一个代码片段,我想知道它的语法含义。我知道语义,从某种意义上说,我可以运行全长代码,看看会发生什么。但我对语言结构本身并不清楚。

class Product < ActiveRecord::Base
    include ActsAsTree

    self.primary_key = 'id'
    acts_as_tree foreign_key: 'product_id'

问题如下:

  1. ActiveRecordActiveRecord gem提供的模块吗?
  2. ActiveRecord::Base模块中包含ActiveRecord类吗?
  3. primary_key属于ActiveRecord::Base类?
  4. 代码的最后一行最让我困惑。 acts_as_tree是宝石的名称。为什么它在声明之前?到底是什么foreign_key: 'product_id'?为什么中间有冒号(:)分隔符?该陈述代表什么语言结构?

2 个答案:

答案 0 :(得分:1)

https://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb

  1. ActiveRecord是一个模块。
  2. Base是模块内的一个类
  3. primary_key是一个类级别var(参见前面的self。)。 Active Records内部使用,如果定义为识别您的表格的pk(如果没有定义,我认为它默认使用&#39; id&#39;
  4. 正如评论所说,foreign_key: 'blah'只是:foreign_key=>'blah的一个奇特的符号。括号是隐含的,它也是隐含的事实

答案 1 :(得分:1)

  1. 是ActiveRecord是ActiveRecord gem提供的模块

  2. Base是ActiveRecord模块中包含的类。

  3. 默认情况下,activerecord将表中的id列视为主键。 如果我们在表中有不同名称的主键,那么我们使用self.primary_key来通知activerecord主键。 primary_key是一个类方法。你可以在这里查看http://apidock.com/rails/ActiveRecord/AttributeMethods/PrimaryKey/ClassMethods/primary_key。您还可以检查源代码以更好地理解该方法的编写方式。

  4. 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中的一个类。

  5. 在开始编写代码之前,先了解一些关于ruby的基本知识。你可以从http://www.tutorialspoint.com/ruby/

    开始