Что означает этот код Ruby? - PullRequest
2 голосов
/ 09 ноября 2010

Команда

rails generate scaffold Post name:string title:string content:text

сгенерировала следующий 20101109001203_create_posts.rb файл:

class CreatePosts < ActiveRecord::Migration
  def self.up
    create_table :posts do |t|
      t.string :name
      t.string :title
      t.text :content

      t.timestamps
    end
  end

  def self.down
    drop_table :posts
  end
end

Поскольку я новичок в Ruby (просто прочитайте одна книга )У меня есть несколько вопросов по этому блоку кода:

  1. Что означает self. в self.up и self.down?Чем он отличается от простых up и down?

  2. Что означают все эти двоеточия (:) в :posts, :name и т. Д.?Это только часть имени переменной?

  3. Что означает t.string :name?Это вызов функции string для объекта t с параметром :name?

Большое спасибо !!

Ответы [ 3 ]

3 голосов
/ 09 ноября 2010
  1. Если вы определяете метод с использованием def foo, вы создаете метод экземпляра с именем foo. То есть если у вас есть экземпляр класса CreatePosts, вы можете сделать the_instance.foo. Однако, делая def self.foo (или, альтернативно, def CreatePosts.foo, который делает то же самое, потому что self == CreatePosts в class ... end -блоке), вы определяете одноэлементный метод, который доступен только для самого CreatePosts. То есть он называется CreatePosts.foo, а не the_instance.foo (это несколько похоже на статические методы в других языках, но не совсем, потому что вы можете использовать тот же синтаксис для определения одноэлементных методов для объектов, которые не являются классами).

  2. :name не имеет ничего общего с любой переменной с именем name. Это символьный литерал, который похож на внутреннюю неизменяемую строку (хотя класс Symbol не определяет методы для манипуляции со строками). Вы можете думать о символах как о неких мини-строках, которые используются, когда вам просто нужно что-то пометить, и вам не нужно манипулировать строками.

  3. Да, именно так.

1 голос
/ 09 ноября 2010
  1. def self.up определяет метод класса up.Когда rails запускает эту миграцию, она вызывает CreatePosts.up.Альтернативой является def up, которая определяет метод экземпляра, который может быть вызван с помощью CreatePosts.new.up.

  2. : name (например), является примером Symbol.Символ похож на строку, но урезан до точки, где почти ничего нет, кроме текста.В этом случае они просто используют его, чтобы сообщить методу #string, как вы хотите, чтобы столбец вызывался.

  3. Вы поняли это точно.

Вы можете найти это полезным.

http://railsapi.com/doc/rails-v3.0.0/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#M000666

1 голос
/ 09 ноября 2010
  1. self - это файл миграции, а up и down соответственно применяют и изменяют миграцию.
  2. Двоеточия являются символами и обозначают имена, тип, масштаб и т. Д.они обозначаются типом / порядком столбца
  3. t.sting :name означает создание столбца в текущем объекте миграции с именем name и типом string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...