Где RoR определяет объекты, которые он создает, когда вы запускаете rails generate scaffold без базы данных? - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь создать приложение Ruby On Rails, которое позволит контролировать и контролировать несколько веб-сервисов.В настоящее время у меня работают эти службы, и я могу видеть «состояние» каждой службы в консольном приложении, которое перечисляет службу и ее состояние, а именно:

Service1 Running
Service2 Paused
Service3 Waiting on Files

Я хочу, чтобы приложение RoR собирало эти ответыв коллекцию объектов PORO под названием Process и коллекцию Processes, я думаю.Тогда я ожидал бы, что маршрут по умолчанию откроет представление «process_list.html.erb», где страница jQuery будет использоваться при загрузке для создания DataTable «process_table», который будет заполняться из этой коллекции процессов.Моя проблема в том, что, хотя мне нравится структура приложений RoR, я не понимаю поток управления в приложении RoR.Если бы я писал это на страницах jQuery и javascript, я бы знал, что моя страница index.jsp будет содержать javascript-ссылку jQuery DataTable, которая будет выполняться при загрузке страницы.Это будет ссылаться на другую функцию javascript, которая будет вызывать веб-службу, собирать ответы, преобразовывать их в массив JSON и возвращать их в DataTable, где она будет отображаться в виде таблицы.У меня может быть таймер для периодического обновления страницы и т. Д. Хотя это будет работать, и я уже создавал такое раньше, кажется, что оно будет гораздо менее «организованным», чем правильное приложение RoR.

Вотшаги, которые я предпринял до сих пор, где я застрял:

1) rails new maestro -O

2) cd maestro

3) rails генерируют процессы скаффолда

4) В маршрутах ..rb я добавил:

  resources :processes, :only => [:show]
  root 'processes#show'

Это должно привести меня на страницу apps / views / Процессы / show.html.erb, где я думал, что смогу как-топредоставьте страницу javascript, которая будет выполняться при загрузке для создания объектов PORO и вернуть их в DataTables в виде массива, который может быть обработан с помощью цикла foreach, извлекающего process.name, process.status в таблицу.Тем не менее, я получаю сообщение об ошибке, что в app / controllers / process_controller.rb есть раздел:

def set_process
  @process = Process.find(params[:id])
end

, а 'find' не определен для Process.Теперь я нигде не могу найти класс «Процесс» и понятия не имею, что это такое и почему он называется.В методе индекса есть ссылка на @process = Process.all.Опять же, где я могу их определить?

Являются ли шаги, которые я показал выше, правильным способом начать создание такого приложения, и если да, что мне делать, чтобы создать или отредактировать класс Process и добавить эти методы?Где я могу разместить JavaScript для этой страницы?Буду признателен за несколько указаний на то, где искать, что читать, чтобы я мог понять ход приложения RoR.

1 Ответ

0 голосов
/ 25 февраля 2019

Rails scaffold делает много предположений, ожидая, что соглашение для вашего действия контроллера будет соответствовать модели / таблице базы данных.Как уже упоминали другие, вы должны избегать использования Process, так как это основной модуль ruby, вместо этого я бы предложил MonitorProcess.

Если вы хотите использовать модель базы данных для хранения информации о процессе, тогдавам понадобится модель (rails g model monitor_process), а также для использования вашего контроллера

rails generate scaffold monitor_processes

Тем не менее, будет построена стандартная установка MVC с миграцией для создания таблицы базы данных, классом модели MonitorProcessконтроллер с RESTful-маршрутами (index, show, new, create, update и destroy) и представлениями для index, show, new, edit и частичной формы, используемой для new и edit, а также настройки файлов для написания ваших тестов.

Если вам не нужен доступ к модели базы данных, вы можете удалить их из вашего контроллера или закомментировать.Но вот где вы находитесь на пути MVC.

before_action :set_monitor_process, only: [:show, :edit, :update, :destroy]

def set_process
  @mocel_process = ModelProcess.find(params[:id])
end

Здесь вы можете рассмотреть возможность использования кабеля действия и использовать свои js на той странице, как вы хотите.Но вам даже нужны рельсы для этого приложения?Похоже, это может быть больше накладных расходов, чем вам нужно.Scaffold - это инструмент, который делает быстрое и простое быстрое создание прототипа приложения, управляемого данными.Но он содержит множество соглашений, которые вам, вероятно, не нужны в вашем случае использования.

Однако, не зная точно, какие веб-сервисы вы хотите создать / отслеживать и как, трудно сказать, следует ли вам это делать.или не следует использовать Rails.Он, безусловно, может быть создан, чтобы делать много вещей вне того, что Scaffold настроил для вас.Это просто для быстрой базовой настройки и избежания большого количества шаблонов.Есть много фреймворков для таких вещей, как фоновые задания и т. Д. Но вопрос в том, нужен ли вам MVC?Если нет, то у вас наверняка есть другие варианты.Если вам нужен только бэкэнд с отделенным внешним интерфейсом, вы можете взглянуть на Использование Rails для приложений только для API Если вам нравится работать с Ruby, Sinatra может быть другим выбором для загляните в .

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