0

在我的 rails 应用程序中,我有一个 Movies 表和一个 Genres 表。流派需要具有特定:id性,这样电影和流派之间的关联才能正常工作。我无法更改流派 ID。

不久前,我在 Rails 控制台中创建了所有类型

g = Genre.new
g.name = "Action"
g.id = 23
g.save!

g = Genre.new 
g.name = "Comedy"
g.id = 1034
g.save!

这保存并创建了流派并使用给定的 :id,所以如果我去 /genres/23 它将带我到动作流派。

在启动之前,我重置了整个数据库并重新创建了流派。

但如果我现在跑

g = Genre.new 
g.name = "Comedy"
g.id = 1034
g.save!

当我尝试转到 /genres/1034 时收到 404 错误,但如果我转到流派/索引页面,Comedy 仍在列出。

如果我在没有指定 id 的情况下创建流派,我不会收到错误消息。

我已经重置了 Genre 表并且我使用了这个 gem ,但我仍然得到 404。这就像 PostgreSQL 只记住 ids 103423如果我再次尝试使用它们,它会给出 404

有人对此有解决方案吗?如何使用以前使用和销毁的 ID 创建流派

流派.rb

class Genre < ActiveRecord::Base
  attr_accessible :name

has_many :movies
end

类型#show

def show
@genre = Genre.find(params[:id])
end
4

1 回答 1

1

I assume that Postgres is choosing its own id for that Genre and setting it. That's why you're getting a 404 error. The id you specify does not exist.

What do you get if you search for the Genre like so:

@genre = Genre.find_by_name("Comedy")
@genre.id

You are going to have consistent problems trying to override Postgres' id determination method. Are you unable to change the values in the Movies table? Why can't you just change the genre_id for the Movie record to match the Genre id that Postgres determines for that record?

Alternate Fix

I believe, if you really need to, that you can do this:

Genre.update_all("id = 1034", "name = 'Comedy'")

That update_all statement will change the id to 1034 for all records with name equal to Comedy, without running into the Rails/Postgres limits on setting ids manually.

于 2013-08-21T17:08:33.517 回答