Я пытаюсь разработать плагин для Ruby on Rails и столкнулся с проблемами при рендеринге моего HTML-представления. Моя структура каталогов выглядит так:
Структура файла
---/vendor
|---/plugins
|---/todo
|---/lib
|---/app
|---/controllers
|---todos_controller.rb
|---/models
|---todos.rb
|---/views
|---index.html.erb
|---todo_lib.rb
|---/rails
|---init.rb
В /rails/init.rb
require 'todo_lib'
В /lib/app/todo_lib.rb
%w{ models controllers views }.each do |dir|
# Include the paths:
# /Users/Me/Sites/myRailsApp/vendor/plugins/todo/lib/app/models
# /Users/Me/Sites/myRailsApp/vendor/plugins/todo/lib/app/controllers
# /Users/Me/Sites/myRailsApp/vendor/plugins/todo/lib/app/views
path = File.expand_path(File.join(File.dirname(__FILE__), 'app', dir))
# We add the above path to be included when Rails boots up
$LOAD_PATH << path
ActiveSupport::Dependencies.load_paths << path
ActiveSupport::Dependencies.load_once_paths.delete(path)
end
В todo / lib / app / controllers / todos_controller.rb
class TodosController < ActionController::Base
def index
end
end
В todo / lib / app / views / index.html.erb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Todos:</title>
</head>
<body>
<p style="color: green" id="flash_notice"><%= flash[:notice] %></p>
<h1>Listing Todos</h1>
</body>
</html>
В /myRailsApp/config/routes.rb
ActionController::Routing::Routes.draw do |map|
# The priority is based upon order of creation: first created -> highest priority.
map.resources :todos
...
Я получаю следующую ошибку:
Шаблон отсутствует
Отсутствует шаблон todos / index.erb в пути просмотра приложения / views
Может кто-нибудь подать мне руку и сказать, что я здесь делаю неправильно, из-за чего мой файл index.html.erb не отображается? Очень ценится!
EDIT:
Я уже безуспешно попробовал следующее:
В /todo/lib/app/controllers/todos_controller.rb
def index
respond_to do |format|
format.html # index.html.erb
end
end
EDIT:
хакунин решил эту проблему. Вот решение.
Он говорит, что я создаю плагин для движка Rails (я понятия не имел, что делаю это), и для него требуется другая структура каталогов, такая, которая выглядит примерно так:
Структура файла
---/vendor
|---/plugins
|---/todo
|---/lib
|---/app
|---/controllers
|---todos_controller.rb
|---/models
|---todos.rb
|---/views
|---/todos
|---index.html.erb
|---todo_lib.rb
|---/rails
|---init.rb
Для этого потребовались следующие изменения:
В todo / lib / todo_lib.rb
%w{ models controllers views }.each do |dir|
# Include the paths:
# /Users/Me/Sites/myRailsApp/vendor/plugins/todo/app/models
# /Users/Me/Sites/myRailsApp/vendor/plugins/todo/app/controllers
# /Users/Me/Sites/myRailsApp/vendor/plugins/todo/app/views
path = File.expand_path(File.join(File.dirname(__FILE__), '../app', dir))
# We add the above path to be included when Rails boots up
$LOAD_PATH << path
ActiveSupport::Dependencies.load_paths << path
ActiveSupport::Dependencies.load_once_paths.delete(path)
end
Сделанное выше изменение находится в строке: path = File.expand_path (File.join (File.dirname ( FILE ), '.. / app' , реж)). [Игнорируйте смелое «ФАЙЛ», это проблема веб-сайта].
Запуск сценария / сервера отобразит страницу index.html.erb в каталоге todo / app / views / todos.