Passage d'une vue en partiel => n'appelle plus le controlleu


#1

Bonjour à tous, je débute avec RoR ( ) et je rencontre un problème
aprés avoir converti une vue en partiel.

Voici mon architecture de départ :

* J'ai un layout "index.rhtml".
* Un controlleur "user" qui possede une méthode "list" qui génére

une variable @mesUsers
* Une vue dans views/user/list.rhtml

Ma vue list.rhtml execute correctement la méthode “list” du controller
user et consulte bien la variable @mesUsers

Cependant j’ai voulu transformer ma vue list.rhtml en partiel, je l’ai
donc renommée “_list.rhtml” et j’ai fais un “render :partial =>
‘user/list’” dans mon layout.
Le partiel est bel et bien appelé mais la variable @mesUsers qu’il
essaye de consulter semble “nil”

Apparament une fois la vue list passée en partiel elle n’appelle plus la
méthode ‘list’ du contolleur ‘user’ et je ne comprends pas comment lui
dire de le faire et de me renvoyer la variable @mesUsers.

Une idée ?


#2

On 7/1/07, Cédric B removed_email_address@domain.invalid wrote:

Apparament une fois la vue list passée en partiel elle n’appelle plus la
méthode ‘list’ du contolleur ‘user’ et je ne comprends pas comment lui
dire de le faire et de me renvoyer la variable @mesUsers.

Une idée ?

Pourrais-tu nous montrer des exemples de codes, car j’avoue ne pas
avoir bien compris ton problème.


Cyril M.


#3

Tout simplement :

Dans mon controlleur j’ai une méthode “list” qui crée une collection
d’utilisateur dans une instance @users :
def list
@users = User.find(:all)
end

-> Quand j’utilise la vue “list.rhtml” elle invoque correctement la
méthode “list” et par conséquent je peux exploiter l’instance @users
avec un for.
<% for user in @users %>
<%= user.nom %>
<% end %>

Cependant je voudrais utiliser cette vue en tant que partiel et quand
j’utilise le partiel “_list.rhtml” : elle n’invoque pas la méthode
“list” et par conséquent je ne peux pas exploiter l’instance @users qui
est nil.


#4

Salut Cédric,

Si ton action “list” et l’action appelant le partial “_list” (que
j’appellerais “p_list”) sont dans le meme controlleur, il suffit que
tu appelles “list” dans l’action “p_list”. Si elles ne sont pas dans
le meme controlleur, il faut rajouter ton code :
@users = User.find(:all)
dans l’action “p_list”.

Benoit

On 7/1/07, Cédric B removed_email_address@domain.invalid wrote:

-> Quand j’utilise la vue “list.rhtml” elle invoque correctement la
est nil.


Posted via http://www.ruby-forum.com/.


Benoit


#5

On 7/1/07, Cédric B removed_email_address@domain.invalid wrote:

-> Quand j’utilise la vue “list.rhtml” elle invoque correctement la
est nil.

Je ne comprend pas ce que tu veux dire par un partiel qui invoque une
méthode. En effet c’est un méthode qui invoke des vues pas l’inverse.
De plus un partiel est surtout à utiliser dans une vue, pas
directement dans ton controller. Quel est ton UserCase pour devoir
voir appelé ton partiel dans ton controller


Cyril M.


#6

Cédric :

<% end %>

Cependant je voudrais utiliser cette vue en tant que partiel et quand
j’utilise le partiel “_list.rhtml” : elle n’invoque pas la méthode
“list” et par conséquent je ne peux pas exploiter l’instance @users qui
est nil.

Si tu utilises @users dans ton layout et que @users est toujours
défini de la même manière (@users = User.find :all par exemple),
tu peux définir un préfiltre (before_filter) qui se chargera de créer
@users correctement, pour toutes les actions qui utilisent ce layout
dans leurs vues.

Si c’est général à ton application, tu peux faire :

class ApplicationController < ActionController::Base
before_filter :get_users

protected
def get_users
@users = User.find :all
end
end

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)