2012-12-28 2 views
2

전자 메일에서 클릭 할 수있는 수신 거부 링크를 생성하려고합니다. 내가 rake routes을 실행하면레일 일치 라우팅 오류

match "/unsubscribe/:email/:token" => "mailing_list_recipients#destroy", :as => :unsubscribe 

, 내가 얻을 :

unsubscribe GET /unsubscribe/:email/:token(.:format) mailing_list_recipients#destroy 

I도 수행 할 수 있습니다

unsubscribe_url(mailing_list_recipient.email, mailing_list_recipient.token) 

출력한다 :

http://localhost:3000/unsubscribe/[email protected]/f99e3af9bd959c6c8f3882a6e10e354e 
여기 내 길의 모습입니다

그러나이 URL을 방문하려고하면 다음 오류가 발생합니다.

No route matches [GET] "/unsubscribe/[email protected]/6458f6a714d81a9cdd1cd1133dd65f0d" 

무엇이 누락 되었습니까?

+2

당신은 이메일를 URL 인코딩해야한다 코멘트했다 주소 – apneadiving

+0

당신은 옳았습니다. 답변으로 의견을 게시 할 수 있습니까? – LandonSchropp

+0

완료, thanks :) – apneadiving

답변

2

로에서 URL을 바꿀 것입니다, 당신은 단순히 URL 인코딩 이메일 주소가

+0

도움을 주셔서 감사합니다! – LandonSchropp

0

문제가있는 이메일 주소는입니다. [email protected]

어댑터를 작성해야합니다. 포인트를 다른 기호 (예 : "!")로 바꿉니다. (여전히 URL 문자열에 이메일을 원하는 경우) :

# Recipient: 

def email_for_url 
    email.gsub(/\./,"!") 
end 

def self.search_by_email(url_email) 
    find_by_email(url_email.gsub(/\!/,".")) 
end 

그래서 당신은 사용할 수 있습니다 :

코드는 그런 일이 될 수

unsubscribe_url(mailing_list_recipient.email_for_url, mailing_list_recipient.token) 

Recipient.search_by_email(params[:email]) 
+0

이메일 주소를 인코딩하는 URL이 조금 더 쉽고 URL을 통해 전달 될 수 있다고 확신합니다. – LandonSchropp

+0

글쎄, 전자 메일을 인코딩하면 아이디어 자체가 죽습니다. (사람의 눈으로는) 인식 할 수있는 이메일을 URL에 표시합니다. 그렇지 않으면 다른 ID를 사용할 수 있습니다. –

0

당신은 이메일 주소를 인코딩해야한다 당신은 여러 가지 방법으로 할 수 있습니다.

# ERB in your view 
<%=u unsubscribe_url(mailing_list_recipient.email, mailing_list_recipient.token) %> 

# Using Rack::Utils 
Rack::Utils.escape(unsubscribe_url(mailing_list_recipient.email, mailing_list_recipient.token)) 

# Using URI::escape 
URI::escape(unsubscribe_url(mailing_list_recipient.email, mailing_list_recipient.token)) 

http://localhost:3000/unsubscribe/[email protected]/f99e3af9bd959c6c8f3882a6e10e354e 

http://localhost:3000/unsubscribe/hello%40hello.com/f99e3af9bd959c6c8f3882a6e10e354e 
+0

여전히 올립니다. 일치하는 경로가 없습니다. 그는 요점을 벗어나야 만합니다. –