2010-06-19 3 views
0

je modèle:test avec Shoulda macro échoue avec l'erreur

class Company < ActiveRecord::Base 
    attr_accessible :name, :address, :description, :email, :www 
    validates_presence_of :name, :address, :email 
    validates_uniqueness_of :user, :name, :email 
    validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create 
    has_many :items, :dependent => :destroy 
    has_one :user 
end 

et de test cas:

class CompanyTest < ActiveSupport::TestCase 
    should_allow_mass_assignment_of :name, :address, :description, :email, :www 
    should_have_one :user 
    should_have_many :items, :dependent => :destroy 
    should_validate_uniqueness_of :name, :email #failed 
    should_validate_presence_of :name, :address, :email #failed 
    should_not_allow_values_for :email, "not valid email" #failed 
    should_allow_values_for :email, "[email protected]" #failed 
end 

Certains tests générés échoue avec l'erreur étrange:

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: companies.user: SELECT "companies".id FROM "companies" WHERE ("companies"."user" IS NULL) LIMIT 1 

Je ne peux pas comprendre pourquoi il a essayé d'accéder à la colonne "utilisateur" de la table de l'entreprise. Il n'existe pas car le modèle utilisateur contient "belongs_to: company" et la colonne "company_id"

Répondre

0

Afaik has_one s'attend à ce que la table source définisse la colonne relation_id. Dans votre cas, je suppose que la table des sociétés stocke la colonne user_id. Donc, vous avez modifier la définition de has_one pour spécifier la direction et la clé étrangère, ou la changer en un appartient_to.

0

validation incorrecte:

validates_uniqueness_of :user 

sans cette ligne, tout va bien!

Questions connexes