Rails에서 전체 URL을 얻고 빌드하는 방법

3805 단어 rubyrailswebdev
현재 요청 절대 URL을 가져오려는 경우가 있습니다. 고맙게도 Rails는 이에 대해 설명하고 간단한 방법을 제공합니다.

request.original_url


이것은 스키마, 호스트, 포트, 경로 및 쿼리 문자열을 포함하지만 앵커는 없는 절대 전체 URL을 반환합니다.

따라서 https://example.com/resource?q=first에 대한 요청의 경우:

request.original_url # => https://example.com/resource?q=first
request.fullpath # => /resource?q=first
request.path # => /resource


전체 URL 구축



컨트롤러 보기에서 전체 URL을 빌드해야 하는 경우 Rails에서 제공하는 URL 헬퍼를 사용하면 됩니다.

post_url(@post)


그러나 request(controller/view) 범위 밖에서는 그렇게 쉽지 않습니다. 예를 들어 백그라운드 작업 내에서 전체 URL을 구축해야 하는 경우 요청이 없기 때문에 Rails는 요청에서 해당 호스트를 가져올 수 없습니다.

작동하려면 두 가지가 필요합니다.



먼저 URL 도우미를 포함합니다.

class MyJob < ApplicationJob
  include Rails.application.routes.url_helpers

  def perform(user)
    user_url(user)
    ...
  end
end


그런 다음 앱 구성에서 URL 옵션을 설정합니다.

# config/environments/production.rb
Rails.application.routes.default_url_options[:host] =  "example.com"
# And for email views
Rails.application.config.action_mailer[:host] = "example.com"


자산(예: 이메일의 이미지/아이콘)에 대한 URL을 생성해야 하는 경우 asset_host도 설정해야 합니다.

# Need only if host is other than the one 
# that handles requests
config.action_controller.asset_host = 'example.com'

# Required since mailer has no request context 
# to get host address from
config.action_mailer.asset_host = 'example.com'

좋은 웹페이지 즐겨찾기