我有一个 cucumber 步骤,尝试填充对象,包括刚刚通过迁移添加的新列。该列名为is_active,错误为:
unknown attribute: is_active (ActiveRecord::UnknownAttributeError)
这是由于这一行而引发的:
city = City.find_or_create_by_name_and_state(:name => attributes['City'], :state => attributes['State'], :icao_code => attributes['ICAO'], :display_order => attributes['Order'], :is_active => attributes['Active'], :current_temperature => attributes['Current'])
奇怪的是,今天早些时候,我添加了 display_order 列,该列工作正常。
如果我从步骤中删除 :is_active 分配并在城市分配后添加“puts city.attributes”,则 is_active 不会列在属性中。但是,如果我从 Rails 控制台执行“City.new.attributes”,则 is_active 属性就存在。
cucumber 测试似乎没有在正确的环境中执行,尽管它能够看到最近的display_order属性,该属性仅在开发环境中定义,就像最近的is_active一样属性。
有什么想法可以让 cucumber 看到该属性吗?
谢谢
菲尔
最佳答案
rake db:migrate
rake db:test:prepare
测试环境不使用开发中使用的相同数据库。您必须在每次实际更改数据库结构的迁移之后运行命令 rake db:test:prepare 来重新创建它。
该命令只是根据 schema.rb 文件(或 Structure.sql,这取决于项目的配置)创建测试数据库,该数据库是在运行迁移时创建/更新的。
关于ruby-on-rails - Cucumber 规范看不到最新迁移添加的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9744637/