为什么 Rails 在 URL 的查询字符串前放置一个句点(点)而不是问号?
Why is Rails putting a period(dot) before the query string in URL's, instead of a question mark?
Rails 正在生成带有句点而不是问号的帐户激活 URL。我在邮件预览和 rails 日志中看到这种情况一直在发生。例子 link:
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
url_route
只接受一个参数:id
。你想要做的是:
edit_account_activation_url(@user.activation_token, email: @user.email)
这会给你 params[:id]
和 params[:email]
在你的控制器中使用。
原因是每个足智多谋的人 url_helper 实际上都需要 n 或 n+1 个参数(其中 n 是路由中命名参数的数量),最后一个参数是路由的格式:
user_path(@user, :json) #=> /users/1.json
(实际上签名只是url_helper(*args)
,从助手内部抛出错误的arity异常)
如果你想添加额外的get参数,你需要传递一个额外的hash,正如nzfinab所说:
user_path(@user, hello: :there) #=> /users/1?hello=there
Rails 正在生成带有句点而不是问号的帐户激活 URL。我在邮件预览和 rails 日志中看到这种情况一直在发生。例子 link:
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
url_route
只接受一个参数:id
。你想要做的是:
edit_account_activation_url(@user.activation_token, email: @user.email)
这会给你 params[:id]
和 params[:email]
在你的控制器中使用。
原因是每个足智多谋的人 url_helper 实际上都需要 n 或 n+1 个参数(其中 n 是路由中命名参数的数量),最后一个参数是路由的格式:
user_path(@user, :json) #=> /users/1.json
(实际上签名只是url_helper(*args)
,从助手内部抛出错误的arity异常)
如果你想添加额外的get参数,你需要传递一个额外的hash,正如nzfinab所说:
user_path(@user, hello: :there) #=> /users/1?hello=there