Problemas Rendering Vista (ActionView :: MissingTemplate ... Erro) no plug-in personalizado

StackOverflow https://stackoverflow.com/questions/1856791

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top