Estoy aprendiendo Ruby on Rails y como parte de la práctica estoy construyendo un sistema de seguimiento de errores, que tiene un administrador, un desarrollador y un control de calidad.
Quiero mostrar todos los proyectos que el gerente ha creado en su pantalla de inicio. Estos proyectos están presentes en una tabla de proyectos.
En mi manager_controller, tengo este código:
class ManagerController < ApplicationController def index @projects = Project.all end def create end endY este es mi index.html.erb en vistas/administrador:
<div class="container"> <h1>Manager's Feed</h1> <p>Hello <%=current_user.username%></p> <%= link_to "Create Project", new_project_path, :class => "btn btn-success"%> <table id='employee-table' class="table table-hover"> <thead class="thead-light"> <tr> <th>ID</th> <th>Title</th> <th colspan="2"></th> </tr> </thead> <tbody> <% @projects.each do |project| %> <tr> <td><%= project.id %></td> <td><%= project.title %></td> </tr> <% end %> </tbody> </table> <div> <%= link_to "Logout", destroy_user_session_path, :method => :delete %> </div> </div>Pero esto me está dando el siguiente error:
No puedo ver por qué @projects es Nulo como lo había definido en mi controlador. ¿Alguien puede ayudarme a solucionar este problema?
Actualización 1 Mi archivo route.rb:
Rails.application.routes.draw do get 'project/show' resources 'project' resources 'manager' resources 'developer' resources 'qa' devise_for :users get 'home/index' root to: "home#index" # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html endControlador de inicio:
class HomeController < ApplicationController before_action :authenticate_user! def index @projects = Project.all if current_user.manager? render '../views/manager/index.html.erb' end if current_user.developer? render '../views/developer/index.html.erb' end if current_user.quality_assurance? render '../views/qa/index.html.erb' end end endEn su pila, puede leer en la parte inferior app/controllers/home_controller.rb
Está inicializando @projects en managers_controller.rb .
Use esto en el controlador correcto.
class HomeController < ApplicationController def index @projects = Project.all end end Su ruta predeterminada está definida por root to: "home#index" con conduce a HomeController#index . Allí, está utilizando render que simplemente "muestra" el contenido. Sugeriría usar redirect_to para redirigir el flujo al controlador correcto con algo como:
class HomeController < ApplicationController before_action :authenticate_user! def index @projects = Project.all if current_user.manager? redirect_to managers_path end if current_user.developer? redirect_to developers_path end if current_user.quality_assurance? redirect_to qas_path end end end Puede encontrar todos los valores *_paths que usé ejecutando rails routes .