Ruby on rails 3 用户友好的URL

Ruby on rails 3 用户友好的URL,ruby-on-rails-3,Ruby On Rails 3,目前,我的寻呼模式有以下设置:/pages/6-about class Page < ActiveRecord::Base def to_param "#{id}-#{permalink}" end end class页面

目前,我的寻呼模式有以下设置:
/pages/6-about

class Page < ActiveRecord::Base 
  def to_param
    "#{id}-#{permalink}"
  end 
end
class页面

我希望URL是
/pages/about
。最好的解决方案是什么?提前谢谢。

关于你的问题,没有太多信息。 有几种方法可以做到这一点,但这完全取决于你在做什么

如果页数是固定的,您可以只保留一个跟踪名称id的静态哈希表

private static readonly Dictionary PagesDict=newdictionary(StringComparer.OrdinalIgnoreCase){{{“about”,6},{“home”,1},{“xxx”,2};
///通过字符串名称获取页面id。如果页面不存在,则返回-1。
公共静态整型GetPageId(字符串名称)
{
int结果;
如果(!PagesDict.TeyGetValue(名称,输出结果))
返回-1;
返回结果;
}
如果您需要读写词典,可以使用ConcurrentDictionary,但当然,该词典不会存储在任何位置,如果没有从DB表或XML之类的内容加载词典,该词典将丢失

如果您的页面是动态的,并且是从DB加载的,那么您需要DB上的一个表,该表通过名称为您提供一个id。然后可以按名称索引表,查询速度应该相当快。 如果您想减少对数据库的访问次数,可以使用并发字典实现一个(相当复杂的)缓存系统

编辑-

还原ID所需的信息量必须大于或等于ID字段可以存储的信息量:)

我是说

如果permalink不是唯一的,则无法从中获取id

如果permalink字段是唯一的,则它与ID相同,它是一个字符串ID。 然后,您可以编写一个查询,给定一个永久链接,该查询将返回一个id

如果可以从一对唯一的字段(例如permalink和fieldX)还原ID,则可以在permalink='about'和fieldX='XXX'处编写一个查询,以便更改

def to_param
  permalink
end
然后实现一个

def self.from_param(value)
  find_by_permalink(value)
end
在您的页面模型中

在控制器中,您需要

def show
  @page = Page.from_param(params[:id])
  ...
end

嗨,谢谢你的快速回复。很抱歉没有添加额外的信息,我认为它位于to_param的设置中。页面内容来自以下字段的数据库-ID、Title、permalink和body
def show
  @page = Page.from_param(params[:id])
  ...
end