Rails通过Model String Key(而不是id)进行自定义路由

时间:2013-06-24 23:50:46

标签: ruby ruby-on-rails-3

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

我有一个class Foo,它继承自ActiveRecord::Base,其实现方式如下:

 class Foo < ActiveRecord::Base
 attr_accessible :subject

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

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

 class SubjectController < ApplicationController

 def index
   #snip
 end

如您所见,SubjectController继承自ApplicationController。

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

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

我输入 localhost:3000 / subject / 1 ,而不是输入 localhost:3000 / subject / 1 ,我希望在输入网址时解析 /:id localhost: 3000 /受试者/脾气暴躁-CAT-说问候

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

1 个答案:

答案 0 :(得分: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转换为数字,一切都将无缝地工作。

This Gist详细介绍了这个主题:)