我有一个带有id和title列的帖子模型。
我的路由(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: ...
如何指定命名路由应使用模型的列_ur和_path函数?
答案 0 :(得分: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
括号中的路径参数(如(:format)
)是可选的,但除非存在安全默认值,否则最好避免这些参数。
您可能通过在路线中包含两个参数而不仅仅是url_for
来哄骗:id
方法。