2011-07-01 38 views
0

可以说我有一个Page资源,并且特定实例的id = 5和permalink = foobar。在Rails中覆盖生成的restful url帮助程序

resources :pages我可以使用<%= link_to @page.title, @page %>它输出url“/ pages/5”。

我该如何输出“/ pages/foobar”呢?同样的编辑url ...我如何使edit_page_path(@page)输出“/页/ foobar /编辑”?

UPDATE

答案至今说来覆盖Page.rb to_param这是一个很好的开始。每个+1。但是如果我想<%=link_to @page.title, @page%>输出“/:permalink”而不是“/ pages /:permalink”?我会接受那个答案。

回答

1

您想要使用固定链接。

添加到您的模型:

class Post 

    def to_param 
     "#{id}-{title}" 
    end 

end 

这是假设你有一个标题。

一旦你得到这个你想看看查找permalink-fu,或者它实际上是非常简单的用做自己保存后:

类岗位

before_save :manage_peramlink 

def manage_peramlink 
    permalink = "#{name.gsub(/\s/, '_').gsub(/[^\w-]/, '').downcase}" 
end 

def to_param 
    "permalink" 
end 

确保您将peramlink作为字段添加到您的模型中。

3

您可以覆盖模型中的to_param方法,该方法将告诉Rails使用什么来代替路由的主键。

例如

class Page 
    def to_param 
    "#{self.id}-#{self.title.parameterize}" 
    end 
end 

的参数化调用使您的标题URL友好,你可能还注意到使用self.id的,这是在情况下建议你有一个重复的标题。

+0

啊,很酷。但是......如果我想将页面路径设置为“/:permalink”而不是“/ pages /:permalink”? – tybro0103

+0

您必须在config/routes.rb文件中创建自定义路由。比如'match /:permalink'=> pages#show'(关闭我的头顶) – basicxman

+0

是的,但是我该如何让助手生成url呢? – tybro0103