在我的rails App中,我有一个Movies表和一个Genres表。类型需要具有特定的: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表,我使用了this gem但我仍然得到了404.就像PostgreSQL只记得id 1034
和23
一样,如果我尝试再次使用它们,它给出了404
任何人都有解决方案吗?如何使用以前使用和销毁的ID创建类型
Genre.rb
class Genre < ActiveRecord::Base
attr_accessible :name
has_many :movies
end
类型#show
def show
@genre = Genre.find(params[:id])
end
答案 0 :(得分:1)
我认为Postgres正在为该类型选择自己的id并进行设置。这就是你得到404错误的原因。您指定的ID不存在。
如果你像这样搜索类型,你会得到什么:
@genre = Genre.find_by_name("Comedy")
@genre.id
尝试覆盖Postgres的id确定方法时,您将遇到一致的问题。您是否无法更改Movies表中的值?为什么你不能只改变电影记录的genre_id以匹配Postgres为该记录确定的类型ID?
替代修复
我相信,如果你真的需要,你可以这样做:
Genre.update_all("id = 1034", "name = 'Comedy'")
update_all语句会将名称等于Comedy的所有记录的ID更改为1034,而不会在手动设置ID时遇到Rails / Postgres限制。