动态环境变量

Dynamic environment variables

我正在重构一些我认为有问题的代码,并且不确定处理此问题的最佳方法。

我的原码是:

def some_url
    if Rails.env == "development"
      url = "http://12.12.12.12/something/#{self.id}"
    else
      url = "https://www.#{ENV['DOMAIN']}/something/#{self.id}?trk=0&updated_at=#{self.updated_at}"
    end
end

我不喜欢 if Rails.env == "development" 部分,我正在尝试将此 URL 提取到环境变量中。我的第一次尝试是:

def some_url
    "#{ENV['DOMAIN']}/something/#{self.id}/#{ENV['URL_PARAMS']}"
end

一切都很好,直到我用 updated_at 结束。除了开发之外,我需要它用于每个环境。所以,我不能将它添加为环境变量,因为它是动态的。有条件地添加它没有意义,因为它并没有比我已经拥有的更好。关于如何处理这个问题有什么想法吗?

好吧,你有条件地需要参数,所以除了通过条件,我看不出有任何简单的方法来做到这一点。就个人而言,我可能会走这条路:

def some_url(params = {})
  base_url = "#{ENV['DOMAIN']}/something/#{self.id}/#{ENV['URL_PARAMS']}"

  params.merge!(updated_at: self.updated_at) unless Rails.env.development?

  base_url << "?#{params.to_query}" unless params.blank?
end

我认为你需要一个条件。我能想到的唯一方法是使用正则表达式从您的 ENV 变量中匹配 "updated_at=" 并将其子化为 "updated_at=#{self.updated_at}"

像这样:

def some_url
    "#{ENV['DOMAIN']}/something/#{self.id}/#{ENV['URL_PARAMS'].sub('updated_at=', "updated_at=#{self.updated_at}")}"
end