환경과 관련된 이메일에서 URL을 보내는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/662708

  •  20-08-2019
  •  | 
  •  

문제

Restful_authentication에 의해 생성 된 코드를 사용하여 일반적으로 가입 및 활성화 메일의 URL로 'localhost'를 얻습니다. 대신 이와 같은 것을 만들려고합니다.

def signup_notification(user, host)
  setup_email(user)
  @subject    += 'Please activate your new account'

  @body[:url]  = "http://#{host}/activate/#{user.activation_code}"
end

그러나 메일을 배송하려는 실제 호출은 관찰자에 있기 때문에 다음을 수행 할 수 없습니다.

UserMailer.deliver_signup_notification(user, request.host_with_port)

모델에서는 요청 방법을 사용할 수 없으므로. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

Yaml 파일에 도메인 당 URL을 저장 한 다음 시작시로드하는 것에 대해 생각했지만 포트가 변경 될 수 있으므로 작동하지 않습니다.

또는 응용 프로그램을로드 할 때 설정된 어딘가에 정적 클래스 변수를 작성하는 것에 대해 생각했지만이 작업을 수행하는 방법을 모르겠습니다. 이니셜 라이저에 대한 요청 방법을 사용할 수 있습니까?

도움이 되었습니까?

해결책

Current_Request 플러그인을 사용해보십시오 http://codeshooter.wordpress.com/2009/08/

나를 위해 일했습니다

다른 팁

활성 메일러를 사용하여 이것을 설정했습니다 config/envrionments/production.rb

config.action_mailer.default_url_options = { :host => "my.host.com" }

모델에서 app/models/event_mailer.rb

def new_event(event)
    recipients  EventMailer::NO_REPLY
    bcc         event.emails('new_event')
    from        EventMailer::FROM_EMAIL
    subject     "#{EventMailer::SUBJECT_HEADER} Event Updated :: #{event.title}"
    content_type    "text/plain"
    body        :event => event
end

그리고 우편물에서 app/views/event_mailer/new_event.rb

You can view the event by going to: <%= url_for(:controller => "events", :action => "show", :id => @event.id, :only_path => false) %>

우편으로 생성됩니다.

You can view the event by going to: http://my.host.com/events/11

나도 같은 문제가 있었고 여기 내가 한 일이 여기 있습니다.

  1. 사용자 모델에서 추가 : attr_accessible에 호스트 한 다음이 메소드를 추가합니다.

    def host=(value)
      write_attribute :host, value
    end
    
  2. 사용자 컨트롤러에서 Create and Activate와 같은 이메일을 보내는 메소드에서

    @user.host = request.host_with_port

나는 여전히 멍청한 레일이기 때문에 누군가 가이 문제에 대한 최고의 실습 솔루션을 내놓기를 바랍니다.

서버에 액세스하는 호스트 이름은 요청의 호스트 헤더에 있습니다. 모델에서 접근 할 수 없어야합니다 (레일이 제정신이라고 가정). 그러나 컨트롤러에서 요청 객체에 액세스 할 수있는 경우 DB에서 모델 객체를 가져올 때 해당 값을 모델 필드에 삽입 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top