2013-08-21 3 views
0

В моем приложении rails у меня есть стол для фильмов и таблица жанров. Жанры должны иметь конкретный :id, чтобы связь между фильмами и жанрами могла работать правильно. Я не могу изменить идентификатор жанров.Rails IDs дает 404

Некоторое время назад я создал все жанры в консоли рельсов, как такой

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

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

Это сохраненное и создал Жанры и работал с данным: ид, так что если я пошел/жанры/23 его Я отведу меня в жанр Action.

Перед запуском я сброшу всю базу данных и воссоздал тогда жанры.

Но если я теперь работаю

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

Я получаю 404 ошибку, когда я пытаюсь идти/жанры/1034, но если я перейти на страницу жанров/индексной Комедия по-прежнему в список.

Если я создаю жанр без указания идентификатора, я не получаю сообщение об ошибке.

Я сбросить таблицу Жанровая и я использовал this gem, но я все еще получаю 404. Это как PostgreSQL только вспомнить идентификаторы 1034 и 23 и если я пытаюсь использовать их снова, это дает 404

У кого-нибудь есть решение? Как я могу создать жанры с ранее использовались и уничтожили идентификаторы

Genre.rb

class Genre < ActiveRecord::Base 
    attr_accessible :name 

has_many :movies 
end 

Жанр # показать

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

Не удалось добавить трассировку стека или выход журнала из ошибки 404? Я пытаюсь понять, как происходит Genre.find, что приводит к 404. –

+0

Вещь, которая меня сейчас путает, когда я перехожу на страницу 404, а затем запускаю журналы, она говорит, что она не может найти фильм с 'id 13'. Когда я иду в кино/13, он дает мне еще 404. Теперь я уверен, что фильм с id 13 никогда не создавался. PLUS, это странно, что он дает мне 404 на странице жанра, потому что он не может найти фильм, разве он просто не даст мне 500? – PMP

+0

Опубликовать действие вашего контроллера для шоу Жанры #, возможно? –

ответ

1

Я предполагаю, что Postgres выбирает свой собственный идентификатор для этого Жанр и настройка. Вот почему вы получаете ошибку 404. Указанный вами идентификатор не существует.

Что вы получите, если вы ищете жанр, как так:

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

Вы будете иметь последовательные проблемы при попытке переопределить метод определения ID Postgres'. Вы не можете изменить значения в таблице «Фильмы»? Почему вы не можете просто изменить genre_id для записи Movie в соответствии с идентификатором Genre, который Postgres определяет для этой записи?

Alternate Fix

Я считаю, если вам действительно нужно, что вы можете сделать это:

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

Это update_all оператор изменит идентификатор в 1034 году для всех записей с именем, равным Комедия, не попадая в пределы Rails/Postgres при настройке идентификаторов вручную.

+0

Если я запустил '@genre = Genre.find_by_name (« Комедия ») @ genre.id', идентификатор возвращается, поэтому он дает мне' 1034'. Дело в том, что жанр создается, когда я его создаю, и он уничтожается, когда я его уничтожаю. Моя проблема в том, что она дает мне 404, когда я перехожу к указанному id. Если я сделаю 'Genre.update_all (" id = 1034 "," name = 'Comedy' ")', он обновит идентификатор Genre и изменит с автоматически установленного id на 1034, но он все равно дает мне это 404 – PMP

+0

Если в индексе Genres # вы делаете для каждого жанра 'link_to genre.name, genre', что делает эта ссылка для URL-адреса, и работает ли она, когда вы нажимаете на нее? –

+0

Если я наводил курсор на действие show на индексной странице, я могу видеть в строке состояния в сафари, что он называет ссылку на http: // localhost: 3000/genres/1034' Когда я нажимаю на нее, к 'http: // localhost: 3000/genres/1034', но все равно дает мне 404 – PMP

Смежные вопросы