Rails update()方法导致自定义URL出错

时间:2014-07-02 22:55:13

标签: ruby-on-rails ruby-on-rails-4 slug friendly-id update-attributes

我要为我的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模型。

有谁知道如何解决这个问题? 非常感谢。

1 个答案:

答案 0 :(得分:1)

如果您继续按照要点中的说明操作,它将解决您的问题。您将不得不处理其他调用者将调用Book.find传递整数id的事实,因此您将要处理这两种情况。因此,您需要检查以确定传递的参数是整数ID还是标题,然后调用相应的find方法(分别为super或find_by_title)。我想,它只是以任何其他方式工作,而且找到的是一种非常基本的方法。