Rails正在生成带有句点的帐户激活网址,而不是问号。我在邮件程序预览和rails日志中都看到了这种情况。示例链接:
http://localhost:3000/account_activations/Cm4OyFOwosBcGZ67qg49nQ/edit.example@railstutorial.org
来自routes.rb:
resources :account_activations, only: [:edit]
来自users_controller.rb:
def create
@user = User.new(user_params)
if @user.save
UserMailer.account_activation(@user).deliver_now
flash[:info] = "Please check your email to activate your account."
redirect_to root_url
else
render 'new'
end
end
来自account_activation.html.erb:
<%= link_to "Activate", edit_account_activation_url(@user.activation_token, @user.email) %>
来自user.rb(创建和分配摘要的方法):
def create_activation_digest
self.activation_token = User.new_token
self.activation_digest = User.digest(activation_token)
end
来自user_mailer_preview.rb:
def account_activation
user = User.first
user.activation_token = User.new_token
UserMailer.account_activation(user)
end
答案 0 :(得分:4)
url_route
只需要一个参数:id
。你想要做的是:
edit_account_activation_url(@user.activation_token, email: @user.email)
这会让您在控制器中使用params[:id]
和params[:email]
。
答案 1 :(得分:2)
原因是每个资源丰富的url_helper实际上都需要n或n + 1个参数(其中n是路由中的一些命名参数),最后一个参数是路由的格式:
user_path(@user, :json) #=> /users/1.json
(实际上签名只是url_helper(*args)
,从帮助者内部抛出了错误的arity异常)
如果你想添加额外的get参数,你需要传递一个额外的哈希,如nzfinab所述:
user_path(@user, hello: :there) #=> /users/1?hello=there