Ruby On Rails:我可以从类方法中调用类方法吗?

时间:2018-06-10 14:24:12

标签: ruby class-method

我需要知道是否可以从类方法中调用类方法以及如何调用。

我的模型上有一堂课,其中一门课的方法很长:

def self.method1(bar)
  # Really long method that I need to split
  # Do things with bar
end

所以我想用2种方法拆分这个方法。像这样的东西

def self.method1(bar)
  # Do things with bar
  # Call to method2
end

def self.method2(bar)
  # Do things
end

它们都必须是类方法

如何从 method1 调用此方法2

感谢。

3 个答案:

答案 0 :(得分:1)

在此处回答:Calling a class method within a class

重新迭代:

def self.method1(bar)
  # Do things with bar
  # Call to method2
  method2( bar )
end

一个完整的例子:

class MyClass
  def self.method1(bar)
    bar = "hello #{ bar }!"
    method2( bar )
  end

  def self.method2(bar)
    puts "bar is #{ bar }"
  end
end

MyClass.method1( 'Foo' )

答案 1 :(得分:1)

为了了解发生了什么,您必须检查类方法中的范围。

class Foo
  def self.bar
    puts self
  end
end

Foo.bar
# => Foo

调用Foo.bar时,会返回Foo。不是实例,而是课程。这意味着您可以在Foo方法中访问self.bar的每个类方法。

class Foo
  def self.bar
    puts "bar was called"
    self.qux
  end

  def self.qux
    puts "qux was called."
  end
end

Foo.bar
# => bar was called
#    qux was called.

答案 2 :(得分:1)

类方法的上下文中的

<div class="searchbox fr"> <div class="selectContainer fl"> <span class="selectOption" id="jsSelectOption" data-value="course"> Type of search </span> <ul class="selectMenu" id="jsSelectMenu"> <li data-value="test">test</li> <li data-value="test_score">test score</li> <li data-value="user">user</li> </ul> </div> <script src="{% static 'js/jquery.min.js' %}"></script> <input id="search_keywords" class="fl" type="text" value="" placeholder="Please input keyword here"/> <img class="search_btn fr" id="jsSearchBtn" src="{% static 'img/search_btn.png' %}"/> </div> 是类本身。因此可以访问当前类中定义的每个类方法。上面的例子非常有用,但我想再给你一个更明确的(在我看来):

self