假设我有一个Page资源,一个特定的实例有id = 5和permalink = foobar。
使用resources :pages
我可以使用<%= link_to @page.title, @page %>
输出网址“/ pages / 5”。
我如何输出“/ pages / foobar”而不是?与编辑网址相同...如何使edit_page_path(@page)
输出“/ pages / foobar / edit”?
更新
到目前为止,答案已经覆盖了Page.rb中的to_param
,这是一个很好的开始。每个+1。但是如果我希望<%=link_to @page.title, @page%>
输出“/:permalink”而不是“/ pages /:permalink”呢?我会接受那个答案。
答案 0 :(得分:3)
您可以覆盖模型中的to_param
方法,该方法将告诉Rails使用什么而不是主键进行路由。
例如
class Page
def to_param
"#{self.id}-#{self.title.parameterize}"
end
end
参数化调用使您的标题网址友好,您可能还会注意到self.id的使用,如果您有重复的标题,建议使用此方法。
答案 1 :(得分:2)
您需要覆盖模型中的to_param方法以返回所需的字段。 Here's a blog post with some examples:
答案 2 :(得分: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
作为字段添加到模型中。