método indefinido 'agendas' para nil:NilClass Actioncontroller?
Frecuentes
Visto 153 veces
0
Esencialmente, tengo una aplicación que usa Devise, tengo un modelo de usuario y un modelo de agenda. Agenda 'belongs_to' user y user 'has_many' agenda, estas son mis relaciones de db. Puedo activar IRB y obtener datos de db correctamente user = User.first user.agendas y obtendré una lista de todas las publicaciones que pertenecen a ese usuario Mi problema ocurre al iniciar sesión, el usuario es redirigido a home#index pero obtengo un NoMethodError en Home#index método indefinido 'agendas' para nil:NilClass Estoy seguro de que me estoy perdiendo algo. ¿Necesito un método de índice en mi controlador de agenda también? ..app/views/home/index.html.erb
<h3>Home</h3>
<div class="row">
<div class="span8">
<% if @user.agendas.any? %>
<h3>Agendas</h3>
<ol class="agendas">
<%= render @agendas %>
</ol>
<% end %>
</div>
</div>
mi home_controller.rb
class HomeController < ApplicationController
before_filter :authenticate_user!
def index
@agendas = current_user.agendas.paginate(page: params[:page])
end
Mi controlador de agenda solo tiene un trozo de creación y destrucción para el código futuro. su modelo /agenda.rb
class Agenda < ActiveRecord::Base
attr_accessible :title
belongs_to :user
validates :title, presence: true, length: { maximum: 140 }
validates :user_id, presence: true
default_scope order: 'agendas.created_at DESC'
end
1 Respuestas
0
Tu error viene de esto:
<% if @user.agendas.any? %>
y el error dice que @user
is nil
. Tu controlador dice:
def index
@agendas = ...
end
No veo @user
se le asigna un valor allí. no creo que tu authenticate_user!
el filtro se está configurando @user
cualquiera. Así que podrías hacer esto:
def index
@user = current_user
@agendas = @user.agendas.paginate(page: params[:page])
end
Y entonces:
<% if @user.agendas.any? %>
<h3>Agendas</h3>
<ol class="agendas">
<%= render @agendas %>
</ol>
<% end %>
También podrías acceder current_user
directamente en su ERB:
<% if current_user.agendas.any? %>
<h3>Agendas</h3>
<ol class="agendas">
<%= render @agendas %>
</ol>
<% end %>
Pero ten en cuenta que ya te has tomado la molestia de calcular @agendas
Entonces, ¿por qué no mirar eso y dejar tu controlador en paz?
<% if @agendas.present? %>
<h3>Agendas</h3>
<ol class="agendas">
<%= render @agendas %>
</ol>
<% end %>
contestado el 03 de mayo de 12 a las 18:05
Gracias por la respuesta, la encontré. - elirishguy
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails ruby devise or haz tu propia pregunta.
atrapé mi myproblem ... home.html.erb debería ser current_user.agendas.any? - TheIrishGuy
pero las agendas no se llenan, ¿alguien ve algún problema con el código de visualización? - TheIrishGuy