ruby-on-rails - 为什么人们大多包装 I18n.t 方法而不是委托(delegate)?

标签 ruby-on-rails ruby ruby-on-rails-4 rails-i18n

我看到很多例子

def t(*args)
  I18n.t(*args)
end

很少

delegate :t, to: I18n

老实说,第二种解决方案在语义上更好。为什么人们往往不使用它?

最佳答案

Why people tend to not use it?

好吧,一个原因(如@BroiSatse 所述)是人们根本不了解这种技术。

从字节码的角度来看,差别不大。 delegate 生成大致相同的方法,并进行一些额外的安全检查(respond_to? 等)

在我们的团队中,我们有这样的规则:delegate 应该用于向外部 调用者提示方法正在被转发到其他对象。因此,它应该仅用于“缩短”委托(delegate)方法的内部调用。也就是说,如果一个方法不是从外部调用的,则不要对其使用 delegate,自己编写转发。

所以选择是基于我们想要传达的信息。是的,我们在我们的应用程序中对 I18n.t 进行了两种形式的委托(delegate) :)

例如:

# use `delegate`, method is called from outside
class User
  has_one :address

  delegate :country, to: :address
end

<%= user.country %>


# only internal callers, do not use `delegate`
class Exporter
  # delegate :export, to: :handler 
  def call
    handler.export
  end

  private

  def handler
    return something_with_export_method
  end
end

关于ruby-on-rails - 为什么人们大多包装 I18n.t 方法而不是委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32091962/

相关文章:

ruby-on-rails - 通过银行转账处理 Rails 付款

ruby-on-rails - 如何解析电子邮件或电话号码参数?

ruby-on-rails - Ruby on Rails : How to undo nested_scaffold in rails

ruby-on-rails - SQL Server 和 Rails 的麻烦

ruby-on-rails - 建立数据库关系 : a product compatible with another product

ruby - erb 如何在数组上循环

ruby - 我在哪里可以找到添加了特定功能的 ruby​​ 版本?

ruby-on-rails - 关系 "has_one"- 如何选择零元素?

ruby-on-rails - mimemagic 怎么了?

excel - Ruby on Rails。模型协会