Объем моделей (?) В Rails - PullRequest
       3

Объем моделей (?) В Rails

0 голосов
/ 19 июня 2020

Я новичок в Ruby на Rails и пытаюсь получить доступ к базе данных моего сайта. Я создал и настроил модель и контроллер под названием Machine и заметил, что в таких местах, как представление Machine, я могу перебирать все машины в моей базе данных, просто используя @ machines.each. Однако это не кажется универсальным, так как когда я создал новый файл Ruby непосредственно во внешнем каталоге моего проекта, как @ machines.each, так и попытка присвоения @machines = Machine.all вызвали ошибки (NoMethodError и NameError соответственно). Вот пример кода, который я мог бы попробовать запустить:

@machines = Machine.all

@machines.each do |machine|
  puts machine.created_at
end

Возможно, мне нужен какой-нибудь оператор импорта?

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Когда вы запускаете сервер rails (или консоль rails), он предварительно загружает ваше приложение Rails, чтобы ваши модели, константы и т. Д. c. автоматически попадают в область действия. Если вы хотите получить доступ к ресурсам вашего приложения из отдельного скрипта, вам все равно нужно загрузить приложение. Самый простой способ сделать это - использовать команду rails runner, которая загружает ваше приложение, а затем выполняет сценарий. Итак, если ваш скрипт выше находится в lib/show_machines, вы должны запустить:

$ bin/rails runner lib/show_machines

Если вам нравятся самоисполняющиеся скрипты, вы также можете использовать runner как строку 'shebang':

#!/usr/bin/env <your_project_path>/rails/runner    
@machines = Machine.all

@machines.each do |machine|
  puts machine.created_at
end
0 голосов
/ 19 июня 2020

Если вы пишете сценарий на простом Ruby - тогда да, вам придется импортировать все вручную, установить sh соединение с БД и т. Д. c.

код будет выглядеть примерно так:

require 'active_support'
require 'active_record'

your_db_config = {
  # your DB config goes here
}

ActiveSupport::Dependencies.autoload_paths += File.join(__dir__, "app/models")
ActiveRecord::Base.establish_connection(your_db_config)

machines = Machine.all

Рассмотрите возможность создания задачи , если вы хотите, чтобы Rails позаботился обо всем этом, и не хотите делать все это вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...