0

所以我为我的 ruby​​ on rails 项目生成了一个脚手架,结果发现我添加了一个不再需要的列。

我生成了一个迁移并删除了额外的列。

然后,我在代码中调用它的任何地方都删除了该列。

但是当我运行“rake test”时,我遇到了几个错误,它们似乎指向这个不存在的列,我修改了 controller_test.rb

  @foo = foos(:one)
  @update = {
  title:       'Lorem Ipsum',
  description: 'Wibbles are fun!',
  image_url:   'lorem.jpg',
  start_date:  '12/12/13',
  end_date:    '13/12/13'
  }

我还修改了应该创建测试并应该更新测试

 test "should create foo" do
 assert_difference('Foo.count') do
  post :create, foo: @update 
 end

和这个

 test "should update foo" do
 put :update, id: @foo, foo: @update 
 assert_redirected_to foo_path(assigns(:foo))
 end

任何帮助将不胜感激,如果需要更多信息,我可以提供更多

4

2 回答 2

1

经过几个小时的坚持,我发现了这个问题。

虽然从表中删除了该列,但项目中仍然有对它的引用,在我的情况下,它在这里 test/fixtures/foo.yaml

要找出所提到的特定行(如果您的 IDE 没有搜索功能),请转到您的 git bash,您在其中工作并运行

 $ grep -r "search term" *

它挑选出搜索词所在的目录,之后它只是删除所有引用的简单案例

请注意,此命令会分配您要查找的行位于底部。

于 2013-07-05T10:49:06.647 回答
0

您是 Rails 新手吗?如果是的话,你能告诉我你在遵循什么指南吗?以及你是如何生成脚手架的

Scaffold 创建了所有这些文件

  invoke  active_record
  create    db/migrate/20130704111616_create_products.rb
  create    app/models/product.rb
  invoke    test_unit
  create      test/models/product_test.rb
  create      test/fixtures/products.yml
  invoke  resource_route
   route    resources :products
  invoke  scaffold_controller
  create    app/controllers/products_controller.rb
  invoke    erb
  create      app/views/products
  create      app/views/products/index.html.erb
  create      app/views/products/edit.html.erb
  create      app/views/products/show.html.erb
  create      app/views/products/new.html.erb
  create      app/views/products/_form.html.erb
  invoke    test_unit
  create      test/controllers/products_controller_test.rb
  invoke    helper
  create      app/helpers/products_helper.rb
  invoke      test_unit
  create        test/helpers/products_helper_test.rb
  invoke    jbuilder
  create      app/views/products/index.json.jbuilder
  create      app/views/products/show.json.jbuilder
  invoke  assets
  invoke    coffee
  create      app/assets/javascripts/products.js.coffee
  invoke    scss
  create      app/assets/stylesheets/products.css.scss
  invoke  scss
  create    app/assets/stylesheets/scaffolds.css.scss

由 active_record、scaffold_controller 和 test_unit 创建的文件可能会在测试中导致错误尝试检查它们以查看是否有任何不应该存在的内容。

也尝试删除 development.sqlite3 和 test.sqlite3 并 rake db:migrate 再次运行。

还有一个rails destroy命令将删除所有自动生成的文件

于 2013-07-04T11:30:12.770 回答