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

时间:2012-09-12 22:25:51

标签: ruby-on-rails ruby oop

我在代码中注意到我正在研究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

1 个答案:

答案 0 :(得分:7)

使用send更可取的情况有很多种。其中一些(我自己遇到)在

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

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