代码之家  ›  专栏  ›  技术社区  ›  Trip

在我创建工厂的过程中出了点问题

  •  0
  • Trip  · 技术社区  · 14 年前

    我希望有人能发现为什么这行不通。

    我得到一个调用的错误,因为我用Factory\u 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
    

    后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 回复  |  直到 14 年前
        1
  •  2
  •   Robert Speicher    14 年前

    你有一个 category 属性,它看起来是一个字符串,但您似乎也有一个类别关联,它会自动在Post上创建一个名为 ,可能会覆盖您的类别属性。因此 Category 类没有 downcase 方法,因为它不是字符串。

    将category属性重命名为 category_name ,但你真的不应该有这个属性。

    self.category.downcase 你是说 self.category.name.downcase ?