我正在使用Rails 3.1.0,我想在路由器URL中“需要”参数字符串正确的方式。也就是说,我有一个token
参数,在执行HTTP POST请求时必须检查以便更新用户信息:
my_site_name/user/1?token=12345abcdr
我打算在router.rb
文件中添加约束,以便“要求”token
。 可取吗?我应该那样继续吗?如果是,我该如何说明相关路由器?
也许我可以通过这种方式声明/使用“命名路由器”传递两个参数:
confirm_user_url(@user, token)
答案 0 :(得分:2)
据我了解,您正在尝试在执行HTTP POST请求时创建令牌参数以便更新用户信息(顺便说一句,如果您正在更新,那么它应该是PUT请求吗?) 。如果是这样,为什么不使用自定义约束?在routes.rb
:
class TokenConstraint
def matches?(request)
request.params[:token].present? # or other logic to check token
end
end
MyApp::Application.routes.draw do
put "/users/:id" => "users#update", :constraints => TokenConstraint.new
end
希望它有所帮助。
答案 1 :(得分:1)
约束路由参数对于检查语法非常有用,不再需要。
在您的情况下,您可以在应用程序控制器或特定控制器上放置 before_filter 。
在application_controller.rb中:
before_filter :check_token
.
.
.
def check_token
.
.
if token_valid
# do this
else
# do this
return false # to stop further processing by other controllers
end
end