代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

在RubyonRails中,:id仅在routes.rb中是可选的。如何区分可选与非可选?

  •  2
  • nonopolarity  · 技术社区  · 14 年前

    在RB中

      map.connect ':controller/:action/:id'
      map.connect ':controller/:action/:id.:format'
    

    但是然后

    http://localhost:3000/foobars/alt
    

    也会有用的。参数是:

    {"action"=>"alt", "controller"=>"foobars"} 
    

    看起来像 :id 这里是可选的。你怎么知道它是可选的还是非可选的?你能做到在routes.rb中它不是可选的吗?

    3 回复  |  直到 14 年前
        1
  •  1
  •   dsueiro    14 年前

    可以使用:requirements对要匹配的路由:id施加一些条件,例如:map.connect“:controller/:action/:id”,:requirements=>:id=>/\d 4/。这样,如果:id不符合要求,那么路由也将不匹配。

        2
  •  0
  •   alternative    14 年前

    在控制器中,如果 params[:id] nil .

        3
  •  0
  •   Salil    14 年前

    http://localhost:3000/foobars/alt

    要实现此路径,您必须在routes.rb中提到此路径。

    有点像跟踪

    map.resources :foobars, :collection=> {:alt=>:get }
    

    否则,它将把alt视为参数[:id],如果使用scaffolding创建控制器,它将转到 show 你的行动 foobars 控制器。

    So for above mention url it becomes optional and treat it as an action insetad of params[:id]