Problemas Rendering Vista (ActionView :: MissingTemplate ... Erro) no plug-in personalizado
-
13-09-2019 - |
Pergunta
Eu estou tentando desenvolver um plugin para o Ruby on Rails e me deparei com problemas de processamento meu ponto de vista html. Minha estrutura de diretório parecerá com isso:
Estrutura do arquivo
---/vendor
|---/plugins
|---/todo
|---/lib
|---/app
|---/controllers
|---todos_controller.rb
|---/models
|---todos.rb
|---/views
|---index.html.erb
|---todo_lib.rb
|---/rails
|---init.rb
Em /rails/init.rb
require 'todo_lib'
Em /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
Em todo / lib / app / controllers / todos_controller.rb
class TodosController < ActionController::Base
def index
end
end
Em 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>
Em /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
...
O erro que eu vejo é o seguinte:
Template está faltando
Faltando modelo de todos / index.erb em vista aplicativo path / vistas
Alguém pode me dar uma mão para cima e me diga o que estou fazendo de errado aqui que está causando o meu arquivo index.html.erb para não esvaziar? Muito apreciada!
EDIT:
Eu já tentei o seguinte sem sucesso:
Em /todo/lib/app/controllers/todos_controller.rb
def index
respond_to do |format|
format.html # index.html.erb
end
end
EDIT:
Hakunin resolveu este problema. Aqui está a solução.
Ele diz que eu estou construindo um motor de plug-in Rails (eu não tinha idéia que eu estava fazendo isso), e requer uma estrutura de diretório diferente, que aparece assim:
Estrutura do arquivo
---/vendor
|---/plugins
|---/todo
|---/lib
|---/app
|---/controllers
|---todos_controller.rb
|---/models
|---todos.rb
|---/views
|---/todos
|---index.html.erb
|---todo_lib.rb
|---/rails
|---init.rb
Esta necessárias as seguintes alterações:
Em 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
A alteração feita acima é na linha: path = File.expand_path (File.join (File.dirname ( arquivo ), '../ aplicativo' , dir)). [Ignorar o 'FILE' boldened, este é um problema com o website].
Running script / servidor irá processar a página index.html.erb sob Todo / app / views / todos.
Solução
Parece que você quer construir um plug-in "motor". Criar "app" e dirs "config" na raiz do seu plugin dir (não sob / lib). Você pode usar o app / views / e app / controladores no seu plug-in como se fosse um aplicativo completo Rails em destaque. Em config / routes.rb você deve declarar rotas introduzidos pelo seu motor.
Consulte http://github.com/neerajdotname/admin_data para um exemplo digno do que motor parece.