创建记录时,为查看该记录而生成的URL以其id结尾
/record/21我希望能够将其更改为更容易阅读的内容,例如我的姓名和模型中的引用属性。我已经研究过friendly_id,但在实现自定义方法以生成URL时遇到了问题
class Animal < ActiveRecord::Base
extend FriendlyId
friendly_id :name_and_ref
def name_and_ref
"#{name}-#{reference}"
end
end我最终得到了一个错误
PG::UndefinedColumn: ERROR: column animals.name_and_ref does not exist LINE 1: SELECT "animals".* FROM "animals" WHERE "animals"."name_an... ^ : SELECT "animals".* FROM "animals" WHERE "animals"."name_and_ref" = 'Clawd-A123456' ORDER BY "animals"."id" ASC LIMIT 1
def show
@animal = Animal.friendly.find(params[:id])
end然后,我遇到了Rails可用的to_param方法,在我的模型中
def to_param
"#{self.id}-#{self.name}"
end它将为我生成一个URL
/19-clawd这是可行的,但是当我执行以下操作时,它会抛出一个错误
def to_param
"#{self.name}-#{self.reference}"
end我的问题是,如何才能在不抛出异常的情况下将URL生成为名称和引用
Couldn't find Animal with 'id'=Clawd-A123456发布于 2014-09-18 21:31:09
如果您希望使用自己的“友好id”,则需要将控制器中的find语句调整为如下所示
id = params[:id].split(/-/, 2).first
@animal = Animal.find(id)类似地,对于名称/引用组合
name, reference = params[:id].split(/-/, 2)
@animal = Animal.find_by(name: name, reference: reference)第二种选择稍微困难一些,因为您必须在模型中做一些工作以确保名称/引用对是唯一的。
发布于 2014-09-18 20:58:04
最简单的方法是使用friendly_id,只需添加缺少的数据库列。请记住,您需要确保此新列对于每条记录都是唯一的。它基本上充当主键。
https://stackoverflow.com/questions/25912689
复制相似问题