我要为我的Rails应用创建自定义网址。 到目前为止,我正在关注Friendy URL文档,如https://gist.github.com/jcasimir/1209730所述。
我已经用模型的属性替换了默认的slug(即:/ books / 4)(即:/ books / the-theord-of-the-rings)。在book.rb模型文件中:
# override to_param
# By default it returns the "slug" of the model
# (ie: @book.to_param => "1")
def to_param
title.parameterize
end
因此,我已经覆盖了book.find()方法,并在book.rb文件中重新定义。
# override find
# the "super" usage is Book.find(1) => object 1
# Now, it is Book.find("bookTitle") => object of that name
def self.find(input)
find_by_title(input)
end
添加此项是为了能够在不使用“slug”或模型ID的情况下找到我的模型。
当我尝试更新Book条目时出现问题。当调用@ book.update(params [:book])时,这是我从服务器获得的错误:
(0.2ms) BEGIN
Book Exists (0.5ms) SELECT 1 AS one FROM "books" WHERE ("books"."title" = 'nasty 22' AND "books"."id" != 62) LIMIT 1
Tag Load (0.6ms) SELECT "tags".* FROM "tags" WHERE "tags"."book_id" = $1 [["book_id", 62]]
Book Load (1.3ms) SELECT "books".* FROM "books" **WHERE "books"."title" = 62** LIMIT 1
PG::UndefinedFunction: ERROR: operator does not exist: character varying = integer
LINE 1: ...CT "books".* FROM "books" WHERE "books"."title" = 62 LIMIT...
有问题的一行是 在哪里“书”。“标题”= 62
在某种程度上,在更新方法中,它正在恢复尝试使用ID而不是标题来查找我的Book模型。
有谁知道如何解决这个问题? 非常感谢。
答案 0 :(得分:1)
如果您继续按照要点中的说明操作,它将解决您的问题。您将不得不处理其他调用者将调用Book.find传递整数id的事实,因此您将要处理这两种情况。因此,您需要检查以确定传递的参数是整数ID还是标题,然后调用相应的find方法(分别为super或find_by_title)。我想,它只是以任何其他方式工作,而且找到的是一种非常基本的方法。