2009-08-05 8 views
2

Je suis à perte ici. Lors de l'exécution en mode Dev (script/serveur) j'ai l'erreur "undefined local variable or method 'id' for #<InsertModelNameHere:0x7f19bdb87dc8>" à des moments aléatoires lorsque j'essaie de lister les entrées pour un certain nombre de mes modèles. Si je rafraîchis la page, ça fonctionne très bien et je suppose que je le vois seulement en dev parce que tout est rechargé pour chaque requête. Peut-être une condition de course ou quelque chose se passe-t-il? Je ne fais même pas référence à l'attribut "id" (table héritée qui utilise une convention de nommage différente) dans les vues où cela pose un problème. Un de mes collègues m'a informé que les rails créeraient un attribut "id" basé sur la clé primaire définie dans le modèle cependant.Rails "variable ou méthode locale non définie" pour un attr qui n'est même pas réfréné

Voici le code de la vue, le message d'erreur, a et la trace de la pile. Je cours des rails 2.3.3.

Vue:

<h2 class="textCenter">To Do List</h2> 
<% form_tag({:action => "list"}, :method => "get") do %> 
    <div class="full_width textCenter"> 
     <%= text_field_tag "q", params[:q] %> 
     <input type="submit" value="Search" /> 
    </div> 
<% end %> 
<table class="full_width list"> 
    <thead > 
     <tr > 
      <th >ID</th> 
      <th >Name</th> 
      <th >Resource ID</th> 
      <th >Company</th> 
      <th >&nbsp;</th> 
      <th >&nbsp;</th> 
     </tr> 
    </thead> 
    <tbody > 
     <% begin %> 
      <% @todos.each do |todo| %> 
       <tr class="<%= cycle "striped", "" %>" > 
        <td ><%= todo.pk_todo_id %></td> 
        <td ><%= todo.name %></td> 
        <td ><%= todo.fk_resource_id %></td> 
        <td ><%= todo.fk_company_id %></td> 
        <td ><%= link_to "STA", {:controller => "stas", :action => "list", :id => todo.fk_resource_id} %></td> 
        <td ><%= link_to "Edit", {:controller => "todos", :action => "edit", :id => todo.pk_todo_id} %></td> 
       </tr> 
      <% end %> 
     <% rescue => e; puts e.message; puts e.backtrace %> 
     <% end %> 
    </tbody> 
</table> 

Erreur: undefined local variable or method 'id' for #<Todo:0x7f19bdb87dc8>

/var/lib/gems/1.8/gems/activerecord-2.3.3/lib/active_record/attribute_methods.rb:260:in 'method_missing' 
/var/lib/gems/1.8/gems/activerecord-2.3.3/lib/active_record/attribute_methods.rb:249:in 'method_missing' 
/home/scott/Projects/cllsuite/trunk/app/views/todos/list.rhtml:25:in '_run_rhtml_app47views47todos47list46rhtml' 
/home/scott/Projects/cllsuite/trunk/app/views/todos/list.rhtml:23:in 'each' 
/home/scott/Projects/cllsuite/trunk/app/views/todos/list.rhtml:23:in '_run_rhtml_app47views47todos47list46rhtml' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_view/renderable.rb:34:in 'send' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_view/renderable.rb:34:in 'render' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_view/base.rb:301:in 'with_template' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_view/renderable.rb:30:in 'render' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_view/template.rb:199:in 'render_template' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_view/base.rb:260:in 'render' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_view/base.rb:343:in '_render_with_layout' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_view/base.rb:257:in 'render' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/base.rb:1246:in 'render_for_file' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/base.rb:941:in 'render_without_benchmark' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/benchmarking.rb:51:in 'render' 
/var/lib/gems/1.8/gems/activesupport-2.3.3/lib/active_support/core_ext/benchmark.rb:17:in 'ms' 
/usr/lib/ruby/1.8/benchmark.rb:308:in 'realtime' 
/var/lib/gems/1.8/gems/activesupport-2.3.3/lib/active_support/core_ext/benchmark.rb:17:in 'ms' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/benchmarking.rb:51:in 'render' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/base.rb:1322:in 'default_render' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/base.rb:1328:in 'perform_action_without_filters' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/filters.rb:617:in 'call_filters' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/filters.rb:610:in 'perform_action_without_benchmark' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/benchmarking.rb:68:in 'perform_action_without_rescue' 
/var/lib/gems/1.8/gems/activesupport-2.3.3/lib/active_support/core_ext/benchmark.rb:17:in 'ms' 
/usr/lib/ruby/1.8/benchmark.rb:308:in 'realtime' 
/var/lib/gems/1.8/gems/activesupport-2.3.3/lib/active_support/core_ext/benchmark.rb:17:in 'ms' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/benchmarking.rb:68:in 'perform_action_without_rescue' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/rescue.rb:160:in 'perform_action_without_flash' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/flash.rb:146:in 'perform_action' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/base.rb:527:in 'send' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/base.rb:527:in 'process_without_filters' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/filters.rb:606:in 'process' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/base.rb:391:in 'process' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/base.rb:386:in 'call' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/routing/route_set.rb:434:in 'call' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/dispatcher.rb:88:in 'dispatch' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/dispatcher.rb:111:in '_call' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/dispatcher.rb:82:in 'initialize' 
/var/lib/gems/1.8/gems/activerecord-2.3.3/lib/active_record/query_cache.rb:29:in 'call' 
/var/lib/gems/1.8/gems/activerecord-2.3.3/lib/active_record/query_cache.rb:29:in 'call' 
/var/lib/gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in 'cache' 
/var/lib/gems/1.8/gems/activerecord-2.3.3/lib/active_record/query_cache.rb:9:in 'cache' 
/var/lib/gems/1.8/gems/activerecord-2.3.3/lib/active_record/query_cache.rb:28:in 'call' 
/var/lib/gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapter /abstract/connection_pool.rb:361:in 'call' 
/var/lib/gems/1.8/gems/rack-1.0.0/lib/rack/head.rb:9:in 'call' 
/var/lib/gems/1.8/gems/rack-1.0.0/lib/rack/methodoverride.rb:24:in 'call' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/params_parser.rb:15:in 'call' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/session/cookie_store.rb:93:in 'call' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/reloader.rb:29:in 'call' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/failsafe.rb:26:in 'call' 
/var/lib/gems/1.8/gems/rack-1.0.0/lib/rack/lock.rb:11:in 'call' 
/var/lib/gems/1.8/gems/rack-1.0.0/lib/rack/lock.rb:11:in 'synchronize' 
/var/lib/gems/1.8/gems/rack-1.0.0/lib/rack/lock.rb:11:in 'call' 
/var/lib/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/dispatcher.rb:106:in 'call' 
/var/lib/gems/1.8/gems/rails-2.3.3/lib/rails/rack/static.rb:31:in 'call' 
/var/lib/gems/1.8/gems/rack-1.0.0/lib/rack/urlmap.rb:46:in 'call' 
/var/lib/gems/1.8/gems/rack-1.0.0/lib/rack/urlmap.rb:40:in 'each' 
/var/lib/gems/1.8/gems/rack-1.0.0/lib/rack/urlmap.rb:40:in 'call' 
/var/lib/gems/1.8/gems/rails-2.3.3/lib/rails/rack/log_tailer.rb:17:in 'call' 
/var/lib/gems/1.8/gems/rack-1.0.0/lib/rack/content_length.rb:13:in 'call' 
/var/lib/gems/1.8/gems/rack-1.0.0/lib/rack/chunked.rb:15:in 'call' 
/var/lib/gems/1.8/gems/rack-1.0.0/lib/rack/handler/mongrel.rb:61:in 'process' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:159:in 'process_client' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in 'each' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in 'process_client' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in 'run' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in 'initialize' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in 'new' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in 'run' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in 'initialize' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in 'new' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in 'run' 
/var/lib/gems/1.8/gems/rack-1.0.0/lib/rack/handler/mongrel.rb:34:in 'run' 
/var/lib/gems/1.8/gems/rails-2.3.3/lib/commands/server.rb:111 
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in 'gem_original_require' 
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in 'require' 
script/server:3 
+0

à quoi ressemble le modèle TODO? – ErsatzRyan

+0

en particulier la méthode fk_resource_id – ErsatzRyan

+0

fk_resource_id est une colonne dans le db –

Répondre

2

Avez-vous réglé la primary_key sur Todo?

class Todo 
    set_primary_key 'pk_todo_id' 

end 

Je pense que c'est peut-être votre problème. Laissez-moi savoir ce qui se passe.

Bonne chance!

+0

Ouais, j'ai déjà cet ensemble –

+0

Cela ne se produit pas non plus à chaque fois que je tape sur le bouton. Cela arrive peut-être la moitié du temps. –

+2

Hey Scott, alors peut-être que c'est un problème 2.3.3. Voir: https://rails.lighthouseapp.com/projects/8994/tickets/2948-exception-a-copie-des-contrôleurs-complet-dans-la-removed-de-la-module-et-et-is-stat- active et une solution possible dans http://github.com/rails/rails/commit/d37ac7958fc88fdbf37a8948102f6b4e45c530b3. Nous avons eu ce problème, apparemment cela ne se produit pas en mode production ou sous le serveur léger. Essayez d'utiliser thin, ou essayez de le recréer en mode production. Le comportement est que les classes sont rechargées de manière incorrecte, donc un talon de Todo est chargé à la place de la vraie classe (donc votre clé primaire est ignorée). – mixonic

0

Je vais revenir à la version 2.3.2 car je ne peux pas obtenir ce patch pour appliquer correctement. Je vais supposer que c'est le problème, d'autant plus qu'il est spécifique à 2.3.3. Merci à tous pour l'aide.

+0

Ouais, nous avons juste travaillé dessus en utilisant thin pour démarrer nos serveurs dev directement. 2.3.3 était une version désordonnée. – mixonic

Questions connexes