Ruby on Rails:Rails 3.0.10中没有方法错误

时间:2012-04-17 03:50:07

标签: ruby-on-rails

abstract (1.0.0)
actionmailer (3.2.2, 3.0.10, 3.0.5, 3.0.3, 2.3.5, 2.1.0)
actionpack (3.2.2, 3.0.10, 3.0.5, 3.0.3, 3.0.0.beta3, 2.3.5, 2.1.0)
activemodel (3.2.2, 3.0.10, 3.0.5, 3.0.3, 3.0.0.beta3)
activerecord (3.0.10)
activeresource (3.2.2, 3.0.10, 3.0.5, 3.0.3, 2.3.5, 2.1.0)
activesupport (3.2.2, 3.0.10, 3.0.5, 3.0.3, 3.0.0.beta3, 2.3.5, 2.1.0)
arel (3.0.2, 2.0.10, 2.0.6)
bcrypt-ruby (3.0.1, 2.1.2)
bson (1.1.5)
bson_ext (1.1.5)
builder (3.0.0, 2.1.2)
bundle (0.0.1)
bundler (1.1.3, 1.1.1, 1.1.0)
cancan (1.6.7, 1.4.1)
coffee-rails (3.2.2)
coffee-script (2.2.0)
coffee-script-source (1.3.1, 1.2.0)
devise (2.0.4, 1.5.3, 1.1.5)
erubis (2.7.0, 2.6.6)
execjs (1.3.0)
hike (1.2.1)
i18n (0.6.0, 0.5.0, 0.3.7)
journey (1.0.3)
jquery-rails (2.0.2, 2.0.1)
jquery_datepicker (0.3.4)
json (1.6.6, 1.6.5)
libv8 (3.3.10.4 x86-linux)
mail (2.4.4, 2.2.19, 2.2.12, 2.2.7)
memcache-client (1.8.5)
mime-types (1.18, 1.17.2, 1.16)
mongo (1.1.5)
mongoid (2.0.0.beta.20)
multi_json (1.2.0)
mysql2 (0.3.11)
nifty-generators (0.4.2)
orm_adapter (0.0.7)
polyglot (0.3.3, 0.3.1)
rack (1.4.1, 1.2.5, 1.2.1, 1.1.3, 1.0.1)
rack-cache (1.2)
rack-mount (0.6.14, 0.6.13)
rack-ssl (1.3.2)
rack-test (0.6.1, 0.5.7, 0.5.6)
rails (3.0.10)
railties (3.2.2, 3.0.10, 3.0.5, 3.0.3)
rake (0.9.2.2, 0.8.7)
rdoc (3.12)
rolify (3.1.0)
sass (3.1.15)
sass-rails (3.2.5)
sprockets (2.1.2)
sqlite3 (1.3.5)
therubyracer (0.9.10)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10, 1.4.9)
tzinfo (0.3.33, 0.3.32, 0.3.23)
uglifier (1.2.4)
warden (1.1.1, 1.0.3)
will_paginate (3.0.3, 3.0.pre2)

以上是宝石清单..

我正在维护一个基本的待办事项,它将在每个任务中定义子任务,但命令task=Todo.tasks.new不会导致方法错误

amrit@PC148881:~/mytodos$ rails console
Loading development environment (Rails 3.0.10)
1.9.2-p290 :001 > todo=todo.first
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.first
    from (irb):1
    from /home/amrit/.rvm/gems/ruby-1.9.2-p290@1.9.2/gems/railties-3.0.10/lib/rails/commands/console.rb:44:in `start'
    from /home/amrit/.rvm/gems/ruby-1.9.2-p290@1.9.2/gems/railties-3.0.10/lib/rails/commands/console.rb:8:in `start'
    from /home/amrit/.rvm/gems/ruby-1.9.2-p290@1.9.2/gems/railties-3.0.10/lib/rails/commands.rb:23:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
1.9.2-p290 :002 > todo=Todo.first
 => #<Todo id: 1, name: "Office", description: "work to be completed at office", created_at: "2012-04-17 08:53:35", updated_at: "2012-04-17 08:53:35"> 
1.9.2-p290 :003 > task=Todo.tasks.new
NoMethodError: undefined method `tasks' for #<Class:0xae32588>
    from /home/amrit/.rvm/gems/ruby-1.9.2-p290@1.9.2/gems/activerecord-3.0.10/lib/active_record/base.rb:1014:in `method_missing'
    from (irb):3
    from /home/amrit/.rvm/gems/ruby-1.9.2-p290@1.9.2/gems/railties-3.0.10/lib/rails/commands/console.rb:44:in `start'
    from /home/amrit/.rvm/gems/ruby-1.9.2-p290@1.9.2/gems/railties-3.0.10/lib/rails/commands/console.rb:8:in `start'
    from /home/amrit/.rvm/gems/ruby-1.9.2-p290@1.9.2/gems/railties-3.0.10/lib/rails/commands.rb:23:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
1.9.2-p290 :004 > ^C
1.9.2-p290 :004 > t=Task.new
 => #<Task id: nil, description: nil, due_date: nil, due_time: nil, completed: nil, todo_id: nil, created_at: nil, updated_at: nil> 
1.9.2-p290 :005 > t.description="meeting"
 => "meeting" 
1.9.2-p290 :006 > t.save
 => true 
1.9.2-p290 :007 > task=Todo.tasks.new
NoMethodError: undefined method `tasks' for #<Class:0xae32588>
    from /home/amrit/.rvm/gems/ruby-1.9.2-p290@1.9.2/gems/activerecord-3.0.10/lib/active_record/base.rb:1014:in `method_missing'
    from (irb):7
    from /home/amrit/.rvm/gems/ruby-1.9.2-p290@1.9.2/gems/railties-3.0.10/lib/rails/commands/console.rb:44:in `start'
    from /home/amrit/.rvm/gems/ruby-1.9.2-p290@1.9.2/gems/railties-3.0.10/lib/rails/commands/console.rb:8:in `start'
    from /home/amrit/.rvm/gems/ruby-1.9.2-p290@1.9.2/gems/railties-3.0.10/lib/rails/commands.rb:23:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
1.9.2-p290 :008 > 

3 个答案:

答案 0 :(得分:1)

您可能无意中在类而不是实例上调用tasks。试试这个:

task=todo.tasks.new

答案 1 :(得分:0)

看起来这是一个简单的拼写错误

todo=todo.first,但是第二个todo是什么?因为好像你没有定义它;在你的第二个例子中你做了

todo=Todo.first

检查你使用大写'T'的第二个例子,尝试纠正,或者你可以尝试

todo = Todo.all.first

(假设您有一个名为Todo的AR模型)

答案 2 :(得分:0)

谢谢!我得到了答案我在创建实例时遇到了错误:t = Todo.new t = Todo.tasks.new而不是:t = Todo.new x = t.tasks。