加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 工厂女孩的奇怪问题

发布时间:2020-12-17 02:41:37 所属栏目:百科 来源:网络整理
导读:我有一个模特 # == Schema Information## Table name: posts## id :integer not null,primary key# name :string(255)# title :string(255)# content :text# created_at :datetime# updated_at :datetime# abstract :text# category_id :integer# finalversi
我有一个模特

# == Schema Information
#
# Table name: posts
#
#  id             :integer         not null,primary key
#  name           :string(255)
#  title          :string(255)
#  content        :text
#  created_at     :datetime
#  updated_at     :datetime
#  abstract       :text
#  category_id    :integer
#  finalversion   :boolean         default(FALSE)
#  published_date :date
#

class Post < ActiveRecord::Base
  has_many :tags
  belongs_to :category

  validates :published_date,:presence => true

  default_scope :order => 'created_at DESC'

  accepts_nested_attributes_for :tags,:allow_destroy => :true,:reject_if => proc { |attrs| attrs.all? { |k,v| v.blank? } }

  def prev_post
    self.class.first(:conditions => ["id < ?",id],:order => "id desc")
  end


  def next_post
    self.class.first(:conditions => ["id > ?",:order => "id asc")
  end

  def SEO_title
    title.gsub(/s+/,'_')
  end

end

和一个工厂

FactoryGirl.define do
  factory :post do
    published_date Date.today
    association :category,:factory => :category
    title Forgery::LoremIpsum.words
    name Forgery::LoremIpsum.word
    content Forgery::LoremIpsum.words(100,:random => 250)
    abstract Forgery::LoremIpsum.words(100,:random => 50)
    finalversion true
  end
end

在rails控制台中,我没有问题

FactoryGirl.create :post

获取有效对象并能够访问* published_date *属性.但是在我的规格中

require 'spec_helper'


(1..5).map do |i|
  title        = "a titlet#{i}"
  escape_title = "a_title_#{i}"
  perma_link = "/posts/#{i}/title/#{escape_title}"

  describe "A post with title '#{title}'" do

    before do
      @post = FactoryGirl.create :post,:id=>i,:title => title
      visit '/posts'
    end

    it "should appear in all links with permalink #{perma_link}" do
      within "section.post_#{@post.id}" do
        page.should have_xpath(%Q%.//h1/a[@href="#{perma_link}"]%)
        within "div.teaser" do
          page.should have_xpath(%Q%.//a[@href="#{perma_link}"]%)
        end
      end
    end
  end
end

我得到了回溯错误

5) A post with title 'a title 5' should appear in all links with permalink /posts/5/title/a_title_5
     Failure/Error: @post = FactoryGirl.create :post,:title => title
     NoMethodError:
       undefined method `published_date=' for #<Post:0x000001047266b8>
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/activemodel-3.0.5/lib/active_model/attribute_methods.rb:364:in `method_missing'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/activerecord-3.0.5/lib/active_record/attribute_methods.rb:46:in `method_missing'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/bundler/gems/factory_girl-4f5f5df39a1b/lib/factory_girl/proxy/build.rb:13:in `set'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/bundler/gems/factory_girl-4f5f5df39a1b/lib/factory_girl/attribute/static.rb:12:in `add_to'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/bundler/gems/factory_girl-4f5f5df39a1b/lib/factory_girl/factory.rb:93:in `block in run'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/bundler/gems/factory_girl-4f5f5df39a1b/lib/factory_girl/factory.rb:91:in `each'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/bundler/gems/factory_girl-4f5f5df39a1b/lib/factory_girl/factory.rb:91:in `run'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/bundler/gems/factory_girl-4f5f5df39a1b/lib/factory_girl/syntax/methods.rb:54:in `create'
     # ./spec/integration/posts_permalinks_spec.rb:12:in `block (3 levels) in <top (required)>'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/hooks.rb:29:in `instance_eval'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/hooks.rb:29:in `run_in'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/hooks.rb:64:in `block in run_all'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/hooks.rb:64:in `each'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/hooks.rb:64:in `run_all'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/hooks.rb:110:in `run_hook'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example_group.rb:191:in `block in eval_before_eachs'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example_group.rb:191:in `each'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example_group.rb:191:in `eval_before_eachs'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:144:in `run_before_each'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:48:in `block (2 levels) in run'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:106:in `with_around_hooks'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:46:in `block in run'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:99:in `block in with_pending_capture'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:98:in `catch'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:98:in `with_pending_capture'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example.rb:45:in `run'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example_group.rb:262:in `block in run_examples'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example_group.rb:258:in `map'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example_group.rb:258:in `run_examples'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/example_group.rb:232:in `run'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/command_line.rb:27:in `block (2 levels) in run'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/command_line.rb:27:in `map'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/command_line.rb:27:in `block in run'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/reporter.rb:12:in `report'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/command_line.rb:24:in `run'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/runner.rb:55:in `run_in_process'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/runner.rb:46:in `run'
     # /Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@ingd/gems/rspec-core-2.5.1/lib/rspec/core/runner.rb:10:in `block in autorun'

我完全被它难住了.有任何想法吗

布拉德

解决方法

你有没有运行rake db:test:prepare?它看起来像你的Post模型已发布_date,但你的工厂说它不存在.不运行此rake任务将是导致此问题的主要因素.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读