【问题标题】:How do I specify that a named route should use a model's columns its _url and _path functions?如何指定命名路由应使用模型的列其 _url 和 _path 函数?
【发布时间】:2011-04-22 09:01:49
【问题描述】:

我有一个带有 id 和 title 列的 Posts 模型。

我的路线(rails 2.3.8)设置如下:

map.post ':title/:id', :controller => 'posts', :action => 'show'

在识别 URL 和显式生成 URL 时可以正常工作,如

post_url(:title => 'foo', :id => 123)

很好地显示为 /foo/123。我想要的是能够打电话

p = Post.create!(:title => 'foo') # let's assume it gets ID 123
url_for(p)

并得到相同的路径。但我得到一个错误:

post_url failed to generate from {:action=>"show", :controller=>"posts",
    :title=>#<Post id: 123 title: "foo" created_at: ...

如何指定命名路由应使用模型的列及其 _url 和 _path 函数?

【问题讨论】:

    标签: ruby-on-rails named-routing


    【解决方案1】:

    当你声明一个路由时,你调用它的方式需要一定数量的参数,并且它们必须以正确的顺序指定,否则事情会变得混乱。

    以下是一些典型的路线:

    map.none '/', :controller => 'none', :action => 'index'
    map.one '/:one_id', :controller => 'one', :action => 'show'
    map.two '/:one_id/:two_id', :controller => 'two', :action => 'show'
    map.three '/:one_id/:two_id/:three_id', :controller => 'three', :action => 'show'
    

    当你想调用它们时,你需要指定你在路由中放入的参数,否则会失效:

    none_path
    one_path(one)
    two_path(one, two)
    three_path(one, two, three)
    

    您可以在末尾包含可选参数。一般来说,混合和匹配自动路由和手动路由方法是一个坏主意:

    # Using named routes
    one_path(one) # /one/1
    one_path(one, :two_id => two) # /one/1?two_id=2
    one_path(:one_id => one) # Awkward format for same
    
    # Using automatic routing
    url_for(:controller => 'one', :action => 'show', :one_id => one) # /one/1
    

    (:format) 等括号中的路径参数是可选的,但最好避免使用这些参数,除非有安全的默认值。

    通过在路由中包含两个参数而不是简单的 :id,您可能会误用 url_for 方法。

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 2011-01-21
      • 2011-12-21
      • 2014-09-05
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 2014-06-17
      • 2012-12-02
      相关资源
      最近更新 更多