2013-01-10 37 views
2

從頭開始編寫我自己的電子郵件確認。努力如何爲我的confirmations_controller生成適當的路由。Rails:電子郵件確認郵件程序中的RESTful(PUT)URL

新用戶會收到一封電子郵件,其中會顯示鏈接迴應用程序以驗證地址。

我的想法是它應該是PUT操作,因爲它會更改數據庫。但是,點擊電子郵件中的鏈接將不會提交「放入」操作...或將它?我必須失去一些東西,拋棄自己的無知。

#config/routes.rb 
... 
resources :confirmations, only: [:update] 

confirmation_url(user.email_token)產生有效的URL:http://localhost:3000/confirmations/ArELEOejYlqbRXdJPavhrp但點擊鏈接時,它是由應用程序收到一個「讓」的要求。

我該如何處理?

回答

2

你的電子郵件格式是什麼?如果它的純文本,它將是一個GET。這本身不是更新激活頁面的問題。你也可以打開一個頁面(使用GET),讓他們點擊一個按鈕進行最終提交(並不少見)。

但是,通過GET更新不會打擾我這個特定的功能。

例如:

# routes.rb 
get 'confirmations/:id/confirm' => 'Confirmations#confirm' 

# confirmations.rb 
class ConfirmationsController < ApplicationController 

    def confirm 
    # handle the get data here (switch aa flag for the email account)  
    end 
end 
+0

它是**純文本**。我打算添加HTML,但總會有一個文本版本('多部分'MIME),所以我想我應該準備好處理'GET'請求,不管?!?那麼,如果我只是想打破純粹的REST風格,我該如何/在哪裏處理GET更新?也許在編輯行動?但這很笨拙'/ confirmations/abcdefghi .../edit'。 – Meltemi

+0

或者如果他們迴應我在#update操作中用'PUT'處理的'HTML'電子郵件。否則我鏈接到一個'/ edit'頁面,在那裏他們可以點擊'PUT'鏈接?要麼...? – Meltemi

+1

增加了一個例子。是/編輯看起來有點奇怪,你應該指出一些人不喜歡HTML電子郵件(所以用純文本計數)。你可以自己定義自己的行爲(參見示例)。使用GET的IMO不應該是一個問題(在這個特定的情況下)。 – Roger