【问题标题】:How to pass a default query param with Rails 2.3.x routing如何使用 Rails 2.3.x 路由传递默认查询参数
【发布时间】:2010-12-25 06:14:53
【问题描述】:

我正在尝试做一些微不足道的事情。我有一堆需要映射的 URL,如下所示:

http://example.com/foo
http://example.com/foo/something

两者都需要转到相同的控制器/动作。我遇到的问题是当http://example.com/foo 被调用时,我需要指定一个默认查询参数。我认为这就是 :defaults 哈希在 routes.rb 中所做的,但不幸的是,以下内容不起作用:

map.connect 'foo', :controller => 'something', :action => 'anaction', 
  :defaults => { :myparam => 'foobar' }

这应该将http://example.com/foo 路由到something 控制器、anaction 动作,并使params[:myparam] 指向字符串“foobar”。

我假设对于第二个示例 http://example.com/foo/something,我需要一条额外的路线。

解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我不会通过在我的路由文件中添加这样的逻辑来使事情复杂化,我只是在我的行动中这样做:

    params[:my_param] ||= 'foobar'
    

    【讨论】:

    • 为我工作——它与 Rails 3 兼容! :P
    【解决方案2】:

    未经测试,但是:

    map.connect 'foo', :controller => 'something', :action => 'anaction', :myparam => 'foobar'
    

    看起来里面的:controller:action 参数并没有什么特别之处,只是最终输入了paramsThe 2.3.8 documentation 似乎证实了这一点。

    更正式地说,您可以包括 路由中的任意参数, 因此:

    map.connect ':controller/:action/:id', :action => 'show', :page => 'Dashboard'
    

    这将 将 :page 参数传递给所有 与此匹配的传入请求 路线。

    【讨论】:

      猜你喜欢
      • 2017-01-17
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      相关资源
      最近更新 更多