2015-01-05 2 views
0

나는 이것을 잘 처리 할 수있는 최선의 방법이 아니라고 생각하는 코드를 리팩토링하고 있습니다.동적 환경 변수

내 원래의 코드는 다음과 같습니다 나는 if Rails.env == "development" 부분을 좋아하지 않는 내가 환경 변수에이 URL을 추출하기 위해 노력하고

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 

. 나는 updated_at과 끝 부분에 도달 할 때까지

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

모든 것이 괜찮 : 내 첫 번째 시도는이이었다 수행했다. 개발을 제외한 모든 환경에서 필요합니다. 동적 변수이므로 환경 변수로 추가 할 수 없습니다. 조건부로 추가하는 것은 이미 가지고있는 것보다 나아지지 않으므로 이해가되지 않습니다. 이 문제를 어떻게 처리 할 것인가?

답변

0

글쎄, 조건부로 매개 변수가 필요하므로 조건부 이외의 다른 방법을 사용하는 것이 쉽지 않습니다. 개인적으로이 경로를 선택하는 것이 좋습니다.

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 
+0

나는이 접근법을 좋아한다. 조건부로 돌아갈 방법이 없다는 것을 알 수 있습니다. 그래서 이것이 가장 깨끗한/가장 좋은 옵션이라고 생각합니다. 도와 주셔서 감사합니다. –

0

나는 조건부가 필요하다고 생각합니다.

def some_url 
    "#{ENV['DOMAIN']}/something/#{self.id}/#{ENV['URL_PARAMS'].sub('updated_at=', "updated_at=#{self.updated_at}")}" 
end 
: 내가없이 생각할 수있는 유일한 방법은 "updated_at = # {self.updated_at}"과 같이

에 대한 귀하의 ENV 변수와 서브 그것을에서 "= updated_at"와 일치하는 정규 표현식을 사용하는 것입니다

+0

이것도 좋은 옵션이지만, 내가 정규식을하고 싶지 확실하지 않다, 나는 여전히 생각을 좋아한다. 도와 주셔서 감사합니다. –

+0

그래, 나는 다른 해결책이 더 깨끗하다고 ​​생각한다. –