2 votes

Erreur bizarre dans pry lors de tests d'associations

Donc je vois cette étrange erreur lorsque j'essaie de faire un test interactif assez simple des associations que j'ai ajoutées. Voici les deux modèles :

class Lot < ActiveRecord::Base
  has_many :graves
  belongs_to :block
end

class Grave < ActiveRecord::Base
  belongs_to :lot
end

Voici les migrations de création de table :

class CreateGraves < ActiveRecord::Migration
  def change
    create_table :graves do |t|
      t.integer :grave_number
      t.integer :lot_id

      t.timestamps null: false
    end
  end
end

class CreateLots < ActiveRecord::Migration
  def change
    create_table :lots do |t|
      t.integer :lot_number
      t.integer :map_type

      t.timestamps null: false
    end
  end
end

Je lance pry avec :

pry -r ./config/environment.rb

Ensuite, dans la session pry, je fais simplement :

lot = Lot.new
l.graves

et j'obtiens cette erreur :

NameError: uninitialized constant Lot::Grafe
from /.../activerecord-4.2.6/lib/active_record/inheritance.rb:158:in `compute_type'

Le ... est simplement le chemin vers mon installation de rbenv et la chaîne de sous-répertoires ruby 2.3.0. Je l'ai remplacé là-dedans pour que la sortie soit lisible.

J'ai plusieurs autres associations similaires définies sur d'autres classes et toutes fonctionnent comme prévu.

2voto

engineerDave Points 1964

C'est un problème avec les inflecteurs de Rails. Cela se produit à des moments étranges et est une bizarrerie étrange de Rails.

2.3.1 :004 > a = "Grave"
 => "Grave"
2.3.1 :005 > a.pluralize
 => "Graves"
2.3.1 :006 > a = "graves"
 => "graves"
2.3.1 :007 > a.singularize
 => "grafe"

Vous pouvez remplacer le comportement par défaut dans le fichier ./config/inflections.rb souvent négligé :)

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.irregular 'grave', 'graves'
end

après le changement

2.3.1 :001 > a = "grave"
 => "grave"
2.3.1 :002 > a.pluralize
 => "graves"
2.3.1 :003 > a = "graves"
 => "graves"
2.3.1 :004 > a.singularize
 => "grave"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X