3

私はまだ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}

何か案は?

マイク

4

2 に答える 2

2

リンクテキストがありません:

<%= link_to 'TEXT', activation_url(@user.activation_token), method: :put %>
于 2012-10-09T19:43:23.300 に答える