2

我正在尝试设置一个应用程序,我可以在其中通过 String 键而不是 id 属性进行路由。为了说明这一点,请考虑以下内容:

我有一个class Foo继承自ActiveRecord::Base并实现如下:

 class Foo < ActiveRecord::Base
 attr_accessible :subject

主题是我的数据库中存在的字符串类型。

我有一个控制器,我实现如下:

 class SubjectController < ApplicationController

 def index
   #snip
 end

如您所见,SubjectController 继承自 ApplicationController。

Runningrake routes为我的主题提供了标准(GET、POST、PUT、DELETE)路线。这是预期的行为,我了解此功能。

我想知道如何扩展routes.rb文件,以便可以使用字符串 url 来访问主题。例如:

我不想输入localhost:3000/subject/1,而是希望在输入 url 时解析这个/:id : localhost:3000/subject/grumpy-cat-says-hello

  1. 这个实现是什么样的?
  2. 我应该如何设置我的routes.rb文件来适应这个?
  3. 我应该如何配置我的应用程序以允许这种类型的实现?

先感谢您。

4

1 回答 1

3

我一直使用https://github.com/FriendlyId/friendly_id来处理这些东西。

如果你喜欢更简单的东西,这会做

class Foo < ActiveRecord::Base
  def to_param
    [id, subject.parameterize].join("-")
  end
end

然后您可以通过以下方式访问您的资源:localhost:3000/foos/1-grumpy-cat-says-hello 基本上,由于资源的名称仍然以数字开头,它会被 Rails 转换为数字,一切都会无缝运行。

这个要点更详细地介绍了这个主题:)

于 2013-06-24T23:54:01.297 回答