Problema con varios controladores y una misma vista

hola lista

tengo varios controladores y una vista para todos, el
application.html.erb;
de todos los controladores que tengo para acceder a algunos necesito
estar logeado y a otros no, por eso en la vista tengo

if current_user
muestro la vista cuando estoy logeado

else

muestro la vista que no requiere que este logeado

end

en problema es que funciona bien cuando no necesito estar logeado pero
cuando si tengo que estar logeado no lo hace bien ya que el
application.html.erb se lee todo seguido y tengo variables que son nulas
ya que no entran por ese controlador.

espero me hayan entendido
les pongo un trazo de la vista las variables que son nulas

<% if !current_user%>

Broker Online ......... <%= yield %>
<%= image_tag Gchart.line (:size => '250x150', :title => 'IBEX 35', :axis_with_labels => 'x,r', :axis_labels => [[@fecha2,@fecha1],['9000',@ulti]], :data => @datos)%>
    <% for num in ([email protected])%>
  1. <%= @titles[num] %>

    <% #<%= @links[num] %>
    %>
    <%= @descriptions[num] %>
  2. <% end %> ..... <%else%>

    <% end %>

    aqui @datos y @titles se calulan en el controlador broker, pero como
    estoy entrado por el controlador empresa, donde necesito estar logeado
    estoy en el else del if y entonces @datos y @title no tienen valor y por
    eso falla.

    como lo resolverian ustedes.

    muchas gracias y espero los comentarios

2008/8/8 Maite P. [email protected]:

else

muestro la vista que no requiere que este logeado

end

en problema es que funciona bien cuando no necesito estar logeado pero
cuando si tengo que estar logeado no lo hace bien ya que el
application.html.erb se lee todo seguido y tengo variables que son nulas
ya que no entran por ese controlador.

Supongo que estás utilizando restful_auth ¿has echado un vistazo a los
métodos que te proporciona? Porque tienes el método logged_in? que
deberías usar para las comprobaciones.

El problema de las variables es básico y la solución se limita a
utilizar comprobaciones nil?, blank?, empty?, any? antes de imprimir,
iterar o usar de cualquier modo variables que no estés segura que
valor van a tener.


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o simplelogica.net
Recuerda comer mucha fruta y verdura.

El 8 de agosto de 2008 14:14, Maite P. <
[email protected]> escribió:

hola lista

hola Maite

tengo varios controladores y una vista para todos, el
application.html.erb;

Supongo que quieres decir un mismo layout para todos, no una misma
vista.
:slight_smile:

de todos los controladores que tengo para acceder a algunos necesito
estar logeado y a otros no, por eso en la vista tengo

¿Por qué no lo controlas desde el controlador? O sea, si hay acciones
que
necesitan estar logueado, lo suyo es que en el controlador pongas un
before_filter que en caso de llegar allí “por accidente”, redirija al
usuario a otra página, por ejemplo, el formulario de login. Por ejemplo:

class PostsController < ApplicationController
before_filter :login_required, :only => [ :new, :create, :edit,
:update,
:destroy ]

Así podríamos dejar las otras acciones index, show, etc., sin

necesidad
de logueo
end

if current_user
muestro la vista cuando estoy logeado

else

muestro la vista que no requiere que este logeado

end

Mejor que “if current_user” me parece más claro “if logged_in?”

en problema es que funciona bien cuando no necesito estar logeado pero

cuando si tengo que estar logeado no lo hace bien ya que el
application.html.erb se lee todo seguido y tengo variables que son nulas
ya que no entran por ese controlador.

Si hay variables que son nulas pq no entran por ese controlador, me
parece
señal de que esos trozos de vista los tienes que sacar del layout
general y
que aparezcan sólo en las vistas relacionadas con el controlador que le
corresponda.

:title => ‘IBEX 35’,

<%= @descriptions[num] %>

eso falla.

Intenta separar más la lógica del controlador y de las vistas, cada
acción
del controlador te debería dejar preparadas las variables que vayas a
necesitar en cada vista… si las hay comunes, puedes usar
before_filter.