私はまだRailsを学んでおり、ユーザーが電子メールとパスワードを入力してサインアップする簡単なプロジェクトを持っています。ユーザーが電子メールのリンクをクリックするまで、ユーザーを非アクティブな状態にしたい。パスワードをリセットするためのRailCastsの例に従いましたが、これが私が思いついたものです:
User モデルに 2 つの新しいフィールドを追加しました。
- アクティベーショントークン:文字列
- アクティブ:ブール値
内部User.rb
には、次の2つの方法があります。
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
その中に 1 つのメソッドを含めます。
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}
何か案は?
マイク