환경과 관련된 이메일에서 URL을 보내는 방법은 무엇입니까?
-
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
나도 같은 문제가 있었고 여기 내가 한 일이 여기 있습니다.
사용자 모델에서 추가 : attr_accessible에 호스트 한 다음이 메소드를 추가합니다.
def host=(value) write_attribute :host, value end
사용자 컨트롤러에서 Create and Activate와 같은 이메일을 보내는 메소드에서
@user.host = request.host_with_port
나는 여전히 멍청한 레일이기 때문에 누군가 가이 문제에 대한 최고의 실습 솔루션을 내놓기를 바랍니다.
서버에 액세스하는 호스트 이름은 요청의 호스트 헤더에 있습니다. 모델에서 접근 할 수 없어야합니다 (레일이 제정신이라고 가정). 그러나 컨트롤러에서 요청 객체에 액세스 할 수있는 경우 DB에서 모델 객체를 가져올 때 해당 값을 모델 필드에 삽입 할 수 있습니다.