Question

J'espérais que quelqu'un repérer pourquoi cela ne marcherait pas.

Je reçois une erreur thats étant appelée parce que les attributs que je précise avec Factory_Girl ne sont pas appliquées au talon avant la validation.

Erreur:

undefined method `downcase' for #<Category:0x1056f2f60>

RSpec2

it "should vote up" do
  @mock_vote = Factory.create(:vote)
  Vote.stub(:get_vote).and_return(@mock_vote)
  get :vote_up, :id => "1"        
end

usines

Factory.define :vote, :class => Vote do |v|
  v.user_id "1"
  v.association :post
end

Factory.define :post, :class => Post do |p|
  p.category "spirituality"
  p.name "sleezy snail potluck"
  p.association :category
end

Factory.define :category, :class => Category do |c|
  c.name "spirituality"
  c.id "37"
end

post.rb - Modèle

before_save           :prepare_posts
validate              :category?

def prepare_posts
  self.update_attribute("category", self.category.downcase)
  if self.url?
    self.url = "http://" + self.url unless self.url.match /^(https?|ftp):\/\//
  end
end

def category?
  unless Category.exists?(:name => self.category.downcase)
    errors.add(:category, "There's no categories with that name.")
  end
  return true
end

En outre, ne hésitez pas à pinailler tout code à la recherche de manière flagrante brut. : D

Merci !!

Était-ce utile?

La solution

Vous avez un attribut category, qui semble être une chaîne, mais vous semblez aussi avoir une association de catégorie qui crée automatiquement, entre autres, un attribut sur Post a appelé category, probablement votre attribut remplaçant la catégorie. Par conséquent, la classe Category n'a pas de méthode de downcase, parce que ce n'est pas une chaîne.

Renommer votre attribut de catégorie à quelque chose comme category_name, mais vraiment vous ne devriez pas avoir cet attribut du tout.

Peut-être où vous appelez self.category.downcase vous vouliez dire self.category.name.downcase?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top