2010-11-24 14 views
1

Comment est-ce possible?Problème étrange avec activerecord fetch/find avec le nom de colonne 'changes' dans un modèle RAILS 2.3.8

Loading development environment (Rails 2.3.8) 
>> wq = Wq.first(:conditions =>['widget_id=? AND qs_id=?',1,1]) 
=> #<Wq id: 1, widget_id: 1, qs_id: 1, operator: 0, requirements: "2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2", changes: "1", route: 2, created_at: "2010-09-07 08:11:05", updated_at: "2010-11-24 10:25:53", body: "Which specific area of gyt are you aiming to addres...", options: "['xyz','pqr']", input_type: nil, status: 1> 

>> wq.changes 
=> {} 
>> wq.changes 
=> {} 
>> wq.requirements 
=> "2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2" 
>> wq.changes 
=> "1" 

Pourquoi est-wq.changes venir comme nulle au départ, puis après la connexion wq.requirements, wq.changes semble venir bien?

Tous les champs qui sont récupérés ont un attr_accessible dans le modèle.

Je ne suis pas en mesure de comprendre cette situation, s'il vous plaît aider tous les gourous de rails.

Répondre

2

Le nom de l'attribut 'changes' est en conflit avec la fonctionnalité AR :: Dirty. Vous devriez probablement choisir un nom différent pour cette colonne.

est ici les rails3 docs pour Dirty api:

http://api.rubyonrails.org/classes/ActiveModel/Dirty.html

En rails2 il est ActiveRecord plutôt que ActiveModel.

Si vous ne parvenez pas à renommer la colonne, vous pouvez contourner le problème en appelant le @model_obj[:changes] à la place.

https://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb#L1466

+0

génial, merci! Je cherchais des problèmes possibles avec le mot clé «changements», mais rien n'a été fait. Pensez-vous qu'il est logique de changer le titre de la question? – papdel

+0

Bien sûr, maintenant que vous savez où est le problème. La question difficile est de savoir comment appeler votre colonne si. Vous pourriez utiliser des modifications, mais cela entrerait en conflit avec vestal_versions, si jamais vous décidez de l'utiliser. Delta peut-être? – noodl

+0

Ce que je vais faire est de changer le nom de la colonne pour quelque chose d'autre plus approprié - 'changes' est un nom de colonne boiteux à avoir de toute façon. Nous sommes dans une itération précoce, donc je crois que c'est possible. – papdel