1

我有一个带有 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 函数?

4

1 回答 1

0

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

以下是一些典型的路线:

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

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

您可能会url_for通过在您的路线中包含两个参数而不是简单的:id.

于 2010-10-07T17:23:36.677 回答