【问题标题】:Ruby on Rails: Why does <Object>.all succeed, yet <Object.find(:all) fails?Ruby on Rails:为什么 <Object>.all 成功,而 <Object.find(:all) 却失败了?
【发布时间】:2016-09-11 05:40:24
【问题描述】:

以下是 rails 控制台的 2 个输出:

1。成功

irb(main):038:0> Category.all
  Category Load (0.0ms)  SELECT "categories".* FROM "categories"
=> #<ActiveRecord::Relation [#<Category id: 1, name: "tutorials", created_at: "2016-05-14 18:44:38", updated_at: "2016-05-14 18:44:38">, #<Category id: 2, name: "news", created_at: "2016-05-14 18:44:38", updated_at: "2016-05-14 18:44:38">, #<Category id: 3, name: "design", created_at: "2016-05-14 18:44:38", updated_at: "2016-05-14 18:44:38">]>

2。失败

irb(main):039:0> Category.find(:all)
  Category Load (0.0ms)  SELECT  "categories".* FROM "categories" WHERE "categories"."id" = $1 LIMIT 1  [["id", nil]]
ActiveRecord::RecordNotFound: Couldn't find Category with 'id'=all
        from h:/rails/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activerecord-4.2.3/lib/active_record/relation/finder_methods.rb:324:in `raise_record_not_found_exception!'
        from h:/rails/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activerecord-4.2.3/lib/active_record/relation/finder_methods.rb:444:in `find_one'
        from h:/rails/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activerecord-4.2.3/lib/active_record/relation/finder_methods.rb:423:in `find_with_ids'
        from h:/rails/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activerecord-4.2.3/lib/active_record/relation/finder_methods.rb:71:in `find'
        from h:in `find'
        from h:/rails/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activerecord-4.2.3/lib/active_record/core.rb:130:in `find'
        from (irb):39
        from h:/rails/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.3/lib/rails/commands/console.rb:110:in `start'
        from h:/rails/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.3/lib/rails/commands/console.rb:9:in `start'
        from h:/rails/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:68:in `console'
        from h:/rails/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
        from h:/rails/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.3/lib/rails/commands.rb:17:in `<top (required)>'
        from bin/rails:4:in `require'
        from bin/rails:4:in `<main>'
irb(main):040:0>

【问题讨论】:

  • 你使用的是哪个 Rails 版本?
  • 这种风格在 4.0 中已被弃用,并在 4.1 中被删除,因为你在 4.2 上它不再起作用了。如果你需要它,你可以。使用github.com/rails/activerecord-deprecated_finders,但如果您正在编写新代码,则应该使用新样式,因为该 gem 不适用于 5

标签: ruby-on-rails rails-console


【解决方案1】:

Rails 4 中删除了 find(:all) 语法。您可以使用 Category.all 获得相同的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2013-11-27
    • 2014-07-01
    相关资源
    最近更新 更多