我正在尝试设置一个应用程序,我可以通过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-说问候
routes.rb
文件以适应这种情况? 提前谢谢。
答案 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详细介绍了这个主题:)