Rails 向 Rails 提个了 pull request

tumayun · 2012年11月16日 · 最后由 tumayun 回复于 2012年11月20日 · 3613 次阅读

https://github.com/rails/rails/pull/8233

在 url 里面加入 params 参数,只要不是 Hash 就会报错! Rails2 和 Rails3 都会报错! 比如 http://ruby-china.org/topics?params=

https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/url.rb#L25

def url_for(options = {})
          path = ""
          path << options.delete(:script_name).to_s.chomp("/")
          path << options.delete(:path).to_s

          params = options[:params] || {}
          params.reject! {|k,v| v.to_param.nil? }

          result = build_host_url(options)

          result << (options[:trailing_slash] ? path.sub(/\?|\z/) { "/" + $& } : path)
          result << "?#{params.to_query}" unless params.empty?
          result << "##{Journey::Router::Utils.escape_fragment(options[:anchor].to_param.to_s)}" if options[:anchor]
          result
        end

这应该是约定的问题,约定好 params 就是一个 hash。 不知道你能否换一个名字呢?

可能有这方面的考虑吧,但是约定是对开发人员来说的,用户输入什么参数,这个是约定不了的 只能说我们开发人员在程序内部做处理,但是社区里面貌似没听说过有针对这个做处理的

用户输入什么样的参数是约定不了,但是可以通过 routes 来约束,这个 pull 估计是通不过的

@pzgz 恩,但是没听社区里面有谁做这些约束

@Rei 什么意思?

@Rei 这个与参数是不一样的啊

@Rei 最近开发 QQ 应用,QQ 就会加上params=,导致服务器报错 而错误太多,对服务器性能影响比较大

第一,楼主提交的这个确实是个 Bug.请快速想办法重构一下,加一下测试。应该能过。抓住机会啊。我就不竞争了。这个点抓的确实很倒位,在 URL 解析阶段就报错了。Controller 层拿不到,不可能做 sanity

@hooopo 没第二,一条就说明白了。措辞在边思考边敲字的过程中估计也忘罗。先让我加个关注这个帖子吧。

嗯,我没看仔细,的确是解析的时候就出错了,那是有问题的,我去顶一个也是

@xds2000 实话说,UnitTest 一直没去学,平时都是用 Rspec, 呵呵

测试已经加上了

今天看了下,已经合并我的分支了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号