Rails路由从对象生成路径

时间:2013-03-30 07:09:16

标签: ruby-on-rails url path routes

我在生成对象的网址时遇到问题。

我的路线文件中有以下代码:

match '(*path)/:name' => 'pages#show'

指向包含以下内容的Page控制器:

def show
    if params[:path] and params[:name]
      @page = Page.where(:path => params[:path], :title => params[:name]).first
    elsif params[:name]
      @page = Page.where(:path => "", :title => params[:name]).first
    end
end

因此,在localhost:3000/food/的情况下,会找到:path => "", :title => 'food'

的页面

localhost:3000/food/pizza会找到:path => "food/", :title => 'pizza'

的页面

问题是尝试获取从Page对象生成的url。 所以link_to(@page.title, @page)会返回:

undefined method 'page_path'

如何使路径反向工作以生成对象的URL?

1 个答案:

答案 0 :(得分:2)

你需要回到'旧式'link_to:

link_to @page.title, :controller => "pages", :action => "show", :path => @page.path, :name => @page.title %>

请参阅示例

下的http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

另外,请查看http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default,了解您真的是否希望沿着这条路走下去