2013-08-21 47 views
0

在我的Rails應用程序中,我有一個Movies表和一個流派表。流派需要有一個特定的:id,以便電影和流派之間的關聯可以正常工作。我無法更改流派ID。Rails ID給出404

前段時間我創造了鐵軌控制檯中的所有流派這樣

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

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

這種保存和創建的類型和給定的工作:ID,所以如果我去/流派/ 23 它會帶我去看行動流派。

在啓動之前,我重置整個數據庫並重新創建流派。

但是,如果我現在運行

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

我得到一個404錯誤,當我嘗試去/流派/ 1034,但如果我去流派/索引頁,仍然被列爲喜劇。

如果我沒有指定id創建流派,我不會收到錯誤。

我已經復位類型表,我用this gem但我仍然獲得了404就好像是PostgreSQL只記住IDS 103423如果我嘗試再次使用它們,它提供了404

任何人都有解決方案?如何創建流派與以前使用和銷燬的ID

Genre.rb

class Genre < ActiveRecord::Base 
    attr_accessible :name 

has_many :movies 
end 

類型#顯示

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

您可以添加堆棧跟蹤或從404錯誤日誌輸出?我試圖瞭解導致404發生的Genre.find。 –

+0

現在令我困惑的事情是,當我進入404頁面然後運行日誌時,它說它無法用'id 13'找到一部電影。當我去看電影/ 13它給了我另一個404。我現在確定電影id 13從未創建。 PLus很奇怪,它給了我一個類型頁面上的404,因爲它無法找到一部電影,它不應該給我一個500? – PMP

+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聲明將與名稱等於ID更改爲1034的所有記錄喜劇,沒有進入Rails/Postgres限制手動設置ID。

+0

如果我運行'@genre = Genre.find_by_name(「Comedy」) @ genre.id',則返回id,所以它給了我'1034'。問題在於,當我創建它時,這個流派正在被創建,當我摧毀它時它被破壞。我的問題是,當我去指定的ID時,它只給了我一個404。 如果我做的是 'Genre.update_all(「id = 1034」,「name ='Comedy'」)',它會更新流派ID並將其從自動設置的ID更改爲1034,但它仍然給我那個404 – PMP

+0

如果在流派#索引中,你爲每個流派'link_to genre.name,genre'做了什麼,那麼這個鏈接爲URL輸出了什麼,並且當你點擊它時它是否工作? –

+0

如果我將鼠標懸停在索引頁面的顯示操作上,我可以在Safari瀏覽器的狀態欄中看到它確實鏈接到了'http:// localhost:3000/genres/1034' 當我點擊它時帶我到'http:// localhost:3000/genres/1034',但是如果我創建一個新流派(不指定id),並且點擊顯示在索引中,它仍會帶我到404 – PMP