Что-то не так в моей последовательности создания фабрики - PullRequest
0 голосов
/ 13 сентября 2010

Я надеялся, что кто-нибудь поймет, почему это не сработает.

Я получаю сообщение об ошибке, потому что атрибуты, которые я указываю с помощью Factory_Girl, не применяются к заглушке до проверки.

Ошибка:

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

Фабрика

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 - Модель

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

Кроме того, не стесняйтесь придираться к любому явно грубому коду. : D

Спасибо !!

1 Ответ

2 голосов
/ 13 сентября 2010

У вас есть атрибут category, который выглядит как строка, но у вас также, кажется, есть ассоциация категории, которая автоматически создает, среди прочего, атрибут на Post с именем category, вероятно, перезаписывая ваш атрибут категории.Следовательно, класс Category не имеет метода downcase, потому что это не строка.

Переименуйте атрибут вашей категории в что-то вроде category_name, но на самом деле у вас вообще не должно быть этого атрибута.

Может, куда ты звонишь self.category.downcase ты имел ввиду self.category.name.downcase?

...