在Rails模型中调用方法时的未定义方法

时间:2013-05-04 17:46:30

标签: ruby-on-rails ruby class methods

当我从我的模型调用某个方法时,我一直得到未定义的方法。

class User < ActiveRecord::Base
  def update!
     request_info
  end
  def request_info
     return "hmmm"
  end
end
更新中的request_info!没有定义 我也试过把它变成self.request_info,但这也不起作用

2 个答案:

答案 0 :(得分:4)

在rails中调用方法有两种方法。

class Foo
  def self.bar
    puts 'class method'
  end

  def baz
    puts 'instance method'
  end
end

Foo.bar # => "class method"
Foo.baz # => NoMethodError: undefined method ‘baz’ for Foo:Class

Foo.new.baz # => instance method
Foo.new.bar # => NoMethodError: undefined method ‘bar’ for #<Foo:0x1e820>
你正在做同样的事吗?我从here采用了这个例子。请查看该页面了解详情。

答案 1 :(得分:0)

更新!对于方法名称来说是一个糟糕的选择:update已经被定义为ActiveRecord :: Base上的(私有)方法 - 这可能会导致混淆。

>> u = User.last
>> u.update
NoMethodError: private method `update' called for #<User:0x007ff862c9cc48>

但除此之外,当我在控制台中尝试时,你的代码工作得很好:

>> u = User.last
>> u.update!
=> "hmmm"