如何处理与" required"相关的路由?参数?

时间:2012-01-16 11:25:37

标签: ruby-on-rails ruby ruby-on-rails-3 url routing

我正在使用Rails 3.1.0,我想在路由器URL中“需要”参数字符串正确的方式。也就是说,我有一个token参数,在执行HTTP POST请求时必须检查以便更新用户信息:

my_site_name/user/1?token=12345abcdr

我打算在router.rb文件中添加约束,以便“要求”token可取吗?我应该那样继续吗?如果是,我该如何说明相关路由器?


也许我可以通过这种方式声明/使用“命名路由器”传递两个参数:

confirm_user_url(@user, token)

2 个答案:

答案 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