Ruby on rails 我可以在Rails模型上使用友好Id,而不必在模型表上创建slug列吗?
在Rails4.2上,我想使用它来路由到特定的模型,但不想在模型表上创建slug列。相反,我更喜欢在模型上使用访问器方法并动态生成slug。这可能吗?我在地图上找不到这个 您不能直接使用友好id执行此操作,因为它使用slug查询数据库()的方式 然而,实现你想要的并不困难。您需要两种方法:Ruby on rails 我可以在Rails模型上使用友好Id,而不必在模型表上创建slug列吗?,ruby-on-rails,friendly-id,Ruby On Rails,Friendly Id,在Rails4.2上,我想使用它来路由到特定的模型,但不想在模型表上创建slug列。相反,我更喜欢在模型上使用访问器方法并动态生成slug。这可能吗?我在地图上找不到这个 您不能直接使用友好id执行此操作,因为它使用slug查询数据库()的方式 然而,实现你想要的并不困难。您需要两种方法: Model#slug方法,该方法将为特定模型提供slug Model.find\u by_slug方法,该方法将生成特定slug的相关查询 现在,在控制器中,您可以使用模型。通过_slug查找从路径参数获取相
Model#slug
方法,该方法将为特定模型提供slugModel.find\u by_slug
方法,该方法将生成特定slug的相关查询李>
现在,在控制器中,您可以使用模型。通过_slug查找
从路径参数获取相关模型。然而,实现这种方法可能会很棘手,特别是如果您的模型#slug
使用了不可逆的slug实现,比如,因为它只是获取文本中无法识别的字符的RID,并将多个内容规范化为同一个字符(例如u和-to-)
您可以使用URI::Escape.encode
和URI::Escape.decode
,但最终会出现一些难看的段塞。如前所述,我使用以下基于动态段塞的自定义路由方法
我想要这样的自定义路由:/foos/the-title-parameterized-1
(其中“1
”是Foo
对象的id
)
Foo
型号:
#...
attr_accessor :slug
#dynamically generate a slug, the Rails `parameterize`
#handles transforming of ugly url characters such as
#unicode or spaces:
def slug
"#{self.title.parameterize[0..200]}-#{self.id}"
end
def to_param
slug
end
#...
routes.rb
:
get 'foos/:slug' => 'foos#show', :as => 'foo'
def show
@foo = Foo.find params[:slug].split("-").last.to_i
end
foos\u controller.rb
:
get 'foos/:slug' => 'foos#show', :as => 'foo'
def show
@foo = Foo.find params[:slug].split("-").last.to_i
end
在我的
show
视图中,我可以使用默认的url帮助器方法foo\u path
如果您必须在Ruby中动态计算“slug”,这意味着您无法根据slug查询记录。你必须把所有的东西都拿出来,用ruby进行分类。您想要的很可能是创建slug的自定义方法。感谢@max,我怀疑这一点,这就是为什么我问了另一个与创建创建slug的自定义方法相关的问题: