我还在学习 Rails,我有一个简单的项目,用户通过提供他们的电子邮件和密码来注册。我希望用户在单击电子邮件链接之前处于非活动状态。我按照 RailCasts 的示例重置密码,这就是我想出的:
我在我的用户模型中添加了两个新字段:
- 激活令牌:字符串
- 活动:布尔
在里面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}
有任何想法吗?
麦克风