2015-05-19 4 views
0

Я новичок в Ruby. Я предоставляю ниже фрагмент кода, который я хочу знать о значении синтаксиса. Я знаю семантику, в некотором смысле, что я могу запустить полный код длины и посмотреть, что произойдет. Но я не совсем понимаю, что такое языковая конструкция.Замешательство синтаксиса Ruby

class Product < ActiveRecord::Base 
    include ActsAsTree 

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

Вопросы следуют:

  1. Является ActiveRecord модуль обеспечивает ActiveRecord драгоценный камень?
  2. Есть ActiveRecord::Base класс, содержащийся в ActiveRecord модуль?
  3. Есть primary_key признак ActiveRecord::Base класс?
  4. Последняя строка кода сбивает меня с толку. acts_as_tree - это имя драгоценного камня. Почему это предшествует в заявлении? А что за черт foreign_key: 'product_id'? Почему существует двоеточие (:) разделитель между ними? Что представляет собой формулировка языка?
+0

Могу я предложить прочитать материал [источник] (http://guides.rubyonrails.org/active_record_basics.html) и посмотреть, на сколько ответов на ваши вопросы? – MCBama

+2

4) Потому что это не * просто * название драгоценного камня - это также метод класса.Это аргумент карты 'act_as_tree'. Я бы сильно подумал о том, чтобы укрепить некоторые основы Ruby. –

+1

'act_as_tree foreign_key: 'product_id'' равно' act_as_tree (: foreign_key =>' product_id ') ' –

ответ

1
  1. Да ActiveRecord является модуль обеспечивается ActiveRecord жемчужины

  2. Баз класс содержится в модуле ActiveRecord.

  3. По умолчанию activerecord обрабатывает столбец id в таблице в качестве первичного ключа. Если у нас есть первичный ключ с другим именем в таблице, мы используем self.primary_key для информирования activerecord о первичном ключе. primary_key - метод класса. Вы можете проверить его здесь http://apidock.com/rails/ActiveRecord/AttributeMethods/PrimaryKey/ClassMethods/primary_key. Вы также можете проверить исходный код, чтобы лучше понять, как этот метод написан.

  4. act_as_tree - это имя жемчужины, и этот драгоценный камень имеет определенный в нем метод действий act_as_tree. act_as_tree foreign_key: строка 'product_id' просто вызывает метод act_as_tree с параметром (foreign_key: 'product_id'). Выше строка эквивалентна act_as_tree (foreign_key: 'product_id') или act_as_tree (: foreign_key => 'product_id'). Параметр функции - это объект Hash. Хэш - это класс в рубине.

Изучите некоторые основные материалы о рубине, прежде чем начинать писать код. Вы можете начать здесь http://www.tutorialspoint.com/ruby/

1

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

  1. ActiveRecord является модулем.
  2. База - это класс внутри модуля
  3. primary_key - это класс var (см. Self. Спереди). Внутренние элементы Active Records используют это, если определено для определения pk для вашей таблицы (если не определено, я думаю, что он использует «id» по умолчанию)
  4. как комментарии говорят foreign_key: 'blah' - всего лишь причудливая нотация для :foreign_key=>'blah. скобка подразумевается, тот факт, что это хэш также подразумевается
Смежные вопросы