Rails 3.1具有固定结构化参数的路径

时间:2011-12-26 23:28:45

标签: ruby-on-rails ruby ruby-on-rails-3 http routes

我有一个短信网关,如果用户回复收到的短信,就会向我发送请求。

# gateway pushes following fixed style get-params 
# to my server/reply_from_gateway-action: ?id=123456&answer=Test

# => http://myserver.aaa/reply_from_gateway?id=123456&answer=Test

现在我想添加以下路由,因为sms网关有一个已定义的get参数结构:

get "deactivate_via_sms?id=:id&answer=:answer" => "reminders#deactivate_via_sms"
      :as => "deactivate_via_sms"

但这不起作用,你能帮助我吗?

2 个答案:

答案 0 :(得分:0)

你可以在控制器中手动从params中提取CGI风格的参数,你不需要(或想要)它们在路线中:

get "deactivate_via_sms" => "reminders#deactivate_via_sms", :as => "deactivate_via_sms"

然后在RemindersController#deactivate_via_sms

def deactivate_via_sms
    id     = params[:id]
    answer = params[:answer]
    #...
end

答案 1 :(得分:0)

  

你可以在控制器中手动将CGI风格的参数拉出params,你不需要(或想要)它们在路线中

但在这种情况下,您无法使用辅助工具,例如

deactivate_via_sms_path(id,answer)

或者您可以使用此代码创建帮助

get "deactivate_via_sms?id=:id&answer=:answer" => "reminders#deactivate_via_sms"
  :as => "deactivate_via_sms"

但您的路由将失败

我通过改变"?"解决了这个问题。到" /"在路线

get "deactivate_via_sms/id=:id&answer=:answer" => "reminders#deactivate_via_sms"
  :as => "deactivate_via_sms"

路由工作和帮助方法也可以正常工作