【发布时间】:2014-08-23 21:48:30
【问题描述】:
我将为我的 Rails 应用程序创建自定义 URL。 到目前为止,我正在关注 Friendy URLs 文档,正如这里提到的 https://gist.github.com/jcasimir/1209730。
我已经用模型的属性(即:/books/the-lord-of-the-rings)替换了默认的 slug(即:/books/4)。在 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...
有问题的行是 WHERE "books"."title" = 62
不知何故,在更新方法的某个地方,它正在恢复尝试使用 ID 而不是标题来查找我的 Book 模型。
有谁知道如何解决这个问题? 非常感谢。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 slug friendly-id update-attributes