2016-01-19 5 views
-4

Я использовал эшафот, чтобы создать таблицу, модель и контроллер db для чего-то, называемого «контактами», с одним столбцом строки в таблице, называемой описанием. Конкретный вызов был:Запрос базы данных Ruby on Rails

rails g scaffold pins description:string 

В pins_controller файле он генерируется, он имеет следующий фрагмент кода:

def index 
    @pins = Pin.all 
end 

ли Pin.all вызов запрашивая все контакты из БД? Является ли .all вызовом SQL или методом Ruby on Rails? Код работает на моем тестовом сайте, я просто хочу понять, что происходит под капотом.

+1

, который является частью ActiveRecord, который будет говорить с БД, чтобы сделать SQL. если вы делаете «rails console» и выполняете Pin.all, вы должны увидеть, какой тип вызова sql генерируется. – jae555

ответ

5

ли вызов Pin.all запрашивая все контакты из БД?

Да, это так. Простым способом проверки является использование rails console. При запуске Pin.all в консоли, он покажет вам что-то вроде:

2.1.2-perf :005 > Pin.all 
    Pin Load (0.1ms) SELECT "pins".* FROM "pins" 
=> [] 

Является .all и SQL вызова или Ruby On Rails метод?

all - это метод ActiveRecord, который будет выполнять запрос SQL. Прочтите doc для получения дополнительной информации.

2

all является Rails ActiveRecord метод который дает все записи когда вы применили на модели ActiveRecord.

Здесь Pin.all возвращает все существующие записи в штифтов таблицы. Эквивалент SQL запрос, который работает в фоновом режиме является

SELECT "pins".* FROM "pins" 
1

ActiveRecord является ORM (реляционное сопоставление объектов), которое представляет собой в основном шаблон проектирования, который позволяет получить доступ к реляционной базе данных с объектно-ориентированного языка программирования (например, Ruby).

Здесь вы используете метод класса ActiveRecord .all, который возвращает все экземпляры Pin.

.all преобразуется в SQL в фоновом режиме, на самом деле то, что вы делаете:

SELECT "pins".* FROM "pins"