Forum: Rails France Problème sur partial

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Julien B. (Guest)
on 2007-02-22 12:08
(Received via mailing list)
Bonjour,

J'ai un problème qui me perturbe, et je suis sûr que vous avez la
réponse.

Si je fais en console :

    puts "hello" if block

j'ai le message suivant :

    NameError: undefined local variable or method `block' for
#<Object:0xb7d1c9fc>
        from (irb):5

si je le fais depuis un controlleur, je n'ai pas d'erreur et block vaut
nil... Est-ce une redéfinition de method_missing qui permet de ne pas
avoir d'erreur ?


J'ai fait ce test car j'ai un comportement étrange avec un partial.
Depuis deux actions différentes index et with_tags, j'appelle la vue
index dans laquelle j'ai un partial :

    <%= render(:partial => 'line_member', :collection => @members ) %>

Dans un cas (rendu depuis l'action index), tout se passe bien : block
vaut nil sans avoir été définie auparavant, et dans l'autre cas j'ai
l'erreur suivante :

    undefined local variable or method `block' for
#<#<Class:0xb617ab18>:0xb617aaf0>

Une idée ?


Merci pour vos lumières,


Julien
Jean-François Trân (Guest)
on 2007-02-22 12:25
(Received via mailing list)
Julien :
> J'ai fait ce test car j'ai un comportement étrange avec un partial.
> Depuis deux actions différentes index et with_tags, j'appelle la vue
> index dans laquelle j'ai un partial :

Avant de te répondre plus en détail, 2 vérifications :
- tu peux nous montrer le code (éventuellement épuré) des actions
index et with_tags ?
- utilises-tu une variable block dans le partiel _line_member.rhtml ?

   -- Jean-François.

--

Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)
Julien B. (Guest)
on 2007-02-22 12:45
(Received via mailing list)
Jean-François Trân wrote:
>
> Avant de te répondre plus en détail, 2 vérifications :
> - tu peux nous montrer le code (éventuellement épuré) des actions
> index et with_tags ?
> - utilises-tu une variable block dans le partiel _line_member.rhtml ?
>
>   -- Jean-François.
>

Voici mes deux actions :

%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<

def with_tag
    @search = :members
    all_members = Member.find_tagged_with( params[ :id ] )
    @nb_results = all_members.size
    respond_to do |format|
      format.html do
        @member_pages, @members = paginate_collection all_members, :page
=> params[ :page ]
        render :action => 'index'
      end
      format.xml do
        render :xml => all_members.to_xml
      end
    end
  end


def index
    [...]
    if session[ :search_field_members ]
      search_members( session[ :search_field_members ] )
      @search = :members
    elsif
       [...]
    end
  end

%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<

Dans mon partial, j'utilise bien une variable block. Celle-ci est
passéeen paramètre via locals  pour une autre variante d'utilisation du partial.


Merci Jean-François,

Julien
Jean-François Trân (Guest)
on 2007-02-22 14:50
(Received via mailing list)
Julien :
> Dans mon partial, j'utilise bien une variable block.

Alors donne-lui un autre nom.

> Celle-ci est passée en paramètre via locals  pour une autre
> variante d'utilisation du partial.

Sans chercher à investiguer profondément, le pb vient sûrement
du fait que tu utilises une variable appelée block.
block est un des noms (avec blk) qu'on utilise couramment pour
récupérer un block attaché lors d'un appel de méthode, dans ladite
méthode, sous la forme d'un objet Proc. Si on ne passe pas de
block, la variable block vaut nil.

Exemple AV::B#render(options = {}, old_local_assigns = {}, &block)

Dans le cas précis d'AV::B, ça peut porter conflit avec le
mécanisme des local_assigns.

   -- Jean-François.
Julien B. (Guest)
on 2007-02-22 14:55
(Received via mailing list)
Jean-François Trân wrote:
> block est un des noms (avec blk) qu'on utilise couramment pour
>
J'ai le même problème avec la variable locale blocked dans mon partial...

En rajoutant dans mon partial :

<% block ||= nil
    blocked ||= nil
%>

Tout fonctionne bien.
Ca reste donc un mystère pour moi.
Jean-François Trân (Guest)
on 2007-02-22 15:14
(Received via mailing list)
Julien :

>
> Tout fonctionne bien.
> Ca reste donc un mystère pour moi.

Mon diagnostic à l'arrache n'est peut-être pas le bon.
Et j'ai lu rapidement un point de ton message.

Vérifie que ta variable est bien définie avec des tests
comme if defined?(blocked) ou if locals[:blocked]
dans ton partiel.

Ceci dit, j'éviterai quand même d'appeler une variable block.

    -- Jean-François.
This topic is locked and can not be replied to.