我還在學習Rails,我有一個簡單的項目,用戶通過提供他們的電子郵件和密碼進行註冊。我希望用戶在點擊電子郵件鏈接之前處於非活動狀態。我跟着RailCasts'例如重置密碼,這是我想出了:在Rails中通過電子郵件激活用戶
我添加了兩個新的領域,以我的用戶模型:
- activation_token:字符串
- 活躍:布爾
裏面User.rb
我有以下兩種方法:
def send_activation
generate_token(:activation_token)
UserMailer.activation(self).deliver
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
我創建了一個新的控制器稱爲ActivationsController
,並在其內部都有一個方法:
def update
@user = User.find_by_activation_token(params[:id])
@user.update_attribute(:active, true)
flash[:success] = "Your account is now activated."
redirect_to root_path
end
裏面routes.rb
我加了這條路線:
resources :activations, only: [:update]
我用下面的方法創建一個UserMailer
:
def activation(user)
@user = user
mail to: user.email, subject: "Account Activation"
end
rake routes
說了以下內容:
activation PUT /activations/:id(.:format) activations#update
裏面activation.text.erb
我有這樣的:
To activate your account, please click the link below:
<%= link_to activation_url(@user.activation_token), method: :put %>
現在,當我嘗試註冊用戶我得到這個錯誤之前,該郵件被髮送出去:
No route matches {:method=>:put}
什麼想法?
邁克
現在我得到這個錯誤: 沒有路線匹配[GET]「/ activations/icrvr5uNahnA5fpVjVTDEw」 – mikeglaz
您必須在您的路線中使其成爲獲取請求。只有在你的瀏覽器與一些軌道工程ujs magick – phoet
隨着PUT,我得到這個URL /activations/:id(.:format),它有一個地方爲我可以通過params [:id]得到的id。但有了GET,我得到/activations(.:format)。有一種方法可以通過GET請求將一個:id加入到URL中嗎?或者有另一種方法可以訪問activation_token? – mikeglaz