在Ruby on Rails中使用send有什么好处?

Goa*_*lie 2 ruby oop ruby-on-rails

我已经在代码中注意到我正在send使用的经常使用的代码我并不完全理解它.使用它而不是不使事情变得复杂而不使用它有什么好处?

一个例子:

  def star_ratings_count(rating)
    self.send("#{rating}_ratings".to_sym).star.count
  end

  def update_star_ratings_count
    self.ratings_count = star_ratings_count(:criteria_one_rating)
  end
Run Code Online (Sandbox Code Playgroud)

Nic*_*sky 7

使用时可能有很多种情况send.其中一些(我自己遇到)下面

  1. 当你不知道真正的方法名称.就像你的例子.
  2. 有了send你可以调用私有或受保护的方法.因此,您可以使用它从外部测试模型测试这些方法.
  3. 当你想在循环中调用方法.像这样的东西

    [:method1, :method2].each { |method| object.send(method) }