动态环境变量

时间:2015-01-05 22:10:06

标签: ruby-on-rails ruby

我正在重构一些我认为很难的代码并且不确定处理这个问题的最佳方法。

我的原始代码是:

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结束。我需要它除了开发之外的每个环境。所以,我不能将它添加为环境变量,因为它是动态的。有条件地添加它没有意义,因为它没有比我已经做的更好。有关如何处理这个问题的想法吗?

2 个答案:

答案 0 :(得分:0)

嗯,你有条件地需要param,所以除了通过条件之外我没有看到任何简单的方法。就个人而言,我可能会走这条路:

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

答案 1 :(得分:0)

我认为你需要有条件的。我能想到的唯一方法是使用正则表达式来匹配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