Почему строительные леса не работают в Ruby on Rails?
Я создал контроллер и модель. Контроллер называется "Админ", а модель называется "Альбом". Я отредактировал database.yml с правильной информацией и выполнил команду rake db:migrate, которая не возвращала ошибок и перенесла db в schema.rb. Внутри контроллера я написал:
class AdminController < ApplicationController
scaffold :album
end
Затем я запустил свой сервер и зашел по http://localhost:3000/admin, но вместо обычной страницы CRUD я получаю следующую ошибку:
app/controllers/admin_controller.rb:3 Request Parameters: None Show session dump --- flash: !map:ActionController::Flash::FlashHash
{}
Response Headers: {"cookie"=>[], "Cache-Control"=>"no-cache"}
Есть идеи почему?
3 ответа
Этот синтаксис для строительных лесов уже давно устарел. В настоящее время rails (версии 2.x) используют следующий метод для создания ресурса:
script/generate scaffold Album title:string date:date ...
Это генерирует представления скаффолдинга (в приложении / представлениях), контроллер (приложение / контроллеры), стандартные тесты (в тесте /) и, что особенно важно, необходимые маршруты для работы скаффолдинга.
Я считаю, что команда разработчиков rails убрала старый синтаксис ("scaffold:resource"), потому что ни одно реальное приложение никогда не оставило бы scaffold нетронутым, т.е. вам всегда понадобится какая-то настройка. С новым синтаксисом вы можете оставить его без изменений, но его также гораздо проще настроить.
Если вам действительно нужно, чтобы ваш контроллер назывался admins, вы можете изменить файл config / rout.rb после создания скаффолдинга. Однако это не имеет смысла: почему URI для создания нового альбома должен называться "/admins/new"?
Если вы пытаетесь создать область администратора для приложения с альбомом изображений, вы, вероятно, ищете пространства имен (поэтому вы можете иметь несколько различных ресурсов, контроллеров и представлений в пространстве имен "admin"). Чтобы создать ресурс альбома в пространстве имен администратора, напишите:
script/generate scaffold Admin/Album title:string date:date
В этом случае ваш контроллер будет доступен как http://host/admin/albums.
Команда script / generate, кажется, не работает, кто-то должен предоставить./script/generate, я думаю, что это проблема с каталогом linux, вы должны явно сказать, что вы запускаете из текущего каталога (./). надеюсь, что это помогает кому-то избежать почесать голову
Хм,
Обычно у вас есть контроллер и модель с именем Admin, и то же самое будет с Album,
Посмотрите на этот краткий ролик о том, как ведется блог с использованием строительных лесов;