0

なぜこれがうまくいかないのか誰かが見つけてくれることを望んでいました。

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

ありがとう!!

4

1 に答える 1

2

category文字列のように見える属性がありますが、特にカテゴリ属性を上書きするという Post の属性を自動的に作成するカテゴリ関連付けがあるようですcategory。したがって、Categoryクラスはdowncase文字列ではないため、メソッドはありません。

カテゴリ属性の名前を のような名前に変更しますcategory_nameが、実際にはその属性をまったく持つべきではありません。

たぶん、あなたが呼んでいるのself.category.downcaseself.category.name.downcaseどこですか?

于 2010-09-13T01:58:55.807 に答える