2013-08-21 4 views
0

Dans mes rails App, j'ai une table de films et une table Genres. Les genres doivent avoir un :id spécifique afin que l'association entre les films et les genres puisse fonctionner correctement. Je ne peux pas changer l'identité des genres.Rails ID donne 404

Il y a quelque temps j'ai créé tous les genres dans la console de rails en tant que tels

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

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

Cela a sauvé et créé les Genres et a travaillé avec le donné: id, donc si je suis allé à/genres/23 il Je vais m'emmener au genre d'action.

Avant le lancement, j'ai réinitialisé toute la base de données et recréé ensuite les genres.

Mais si je cours maintenant

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

je reçois une erreur 404 quand je tente d'aller/genres/1034, mais si je vais aux genres/page d'index, la comédie est encore Cotée.

Si je crée un genre sans spécifier l'ID, je ne reçois pas d'erreur.

J'ai remis à zéro le tableau de genre et je l'ai utilisé this gem mais je reçois encore 404. Il est comme PostgreSQL est seulement se souvenir des ids 1034 et 23 et si je tente de les utiliser à nouveau, il donne une 404

Quelqu'un at-il une solution à ce problème? Comment puis-je créer des genres avec précédemment utilisé et détruit ID

Genre.rb

class Genre < ActiveRecord::Base 
    attr_accessible :name 

has_many :movies 
end 

Genre # montrent

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

Pourriez-vous ajouter une trace de pile ou une sortie de journal à partir de l'erreur 404? J'essaie de comprendre comment se produit le genre.find qui aboutit à un 404. –

+0

La chose qui me déroute maintenant, c'est quand je vais sur la page 404 et ensuite exécuter les journaux, il est dit qu'il ne peut pas trouver un film avec 'id 13'. Quand je vais au cinéma/13 cela me donne un autre 404. Je suis maintenant certain que ce film avec id 13 n'a jamais été créé. PLus c'est bizarre que ça me donne un 404 sur la page de genre parce qu'il ne peut pas trouver un film, ne devrais-je pas m'en donner un 500? – PMP

+0

Publiez votre action de contrôleur pour Genres # show, peut-être? –

Répondre

1

Je suppose que Postgres est de choisir son propre identifiant pour cette Genre et réglage. C'est pourquoi vous obtenez une erreur 404. L'identifiant que vous spécifiez n'existe pas.

Qu'est-ce que vous obtenez si vous recherchez le genre comme ceci: méthode

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

Vous allez avoir des problèmes constants essayant de passer outre de détermination identifiant de Postgres. Êtes-vous incapable de modifier les valeurs dans le tableau Films? Pourquoi ne pouvez-vous pas simplement changer le genre_id de l'enregistrement Movie pour qu'il corresponde à l'identifiant de genre que Postgres détermine pour cet enregistrement?

Autre Fix

Je crois, si vous avez vraiment besoin, que vous pouvez faire ceci:

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

Cette update_all déclaration changera l'id 1034 pour tous les enregistrements avec le nom égal à Comédie, sans courir dans les limites Rails/Postgres sur la définition des identifiants manuellement.

+0

Si je cours '@genre = Genre.find_by_name (" Comedy ") @ genre.id' l'id est retourné, donc il me donne' 1034'. La chose est que le genre est créé quand je le crée et qu'il est détruit quand je le détruis. Mon problème est que cela me donne seulement un 404 quand je vais à l'id spécifié. si je le fais 'Genre.update_all (" id = 1034 "," name = 'Comedy' ")', il mettra à jour l'ID de genre et passera de l'ID automatiquement à 1034 mais il me donne toujours 404 – PMP

+0

Si, sur Genres # index, vous faites pour chaque genre 'link_to genre.name, genre', qu'est-ce que ce lien produit pour l'URL, et ça marche quand vous cliquez dessus? –

+0

Si je survole l'action d'affichage dans la page d'index, je peux voir dans la barre d'état dans le safari qu'il fait infact lien vers 'http: // localhost: 3000/genres/1034' Lorsque je clique dessus, prenez-moi à 'http: // localhost: 3000/genres/1034' mais me donne toujours un 404 – PMP