2013-03-12 2 views
0

Я пытаюсь создать список директоров, которые имеют много фильмов (каждый фильм принадлежит одному директору):has_many, belongs_to вопросов в Rails

class Director < ActiveRecord::Base 
    attr_accessible :director 

    has_many :movies 
end 

class Movies < ActiveRecord::Base 
    attr_accessible :director_id, :title, :rating, :boxoffice 

    belongs_to :director 
end 

Мои схемы выглядит как это:

ActiveRecord::Schema.define(:version => 20130312174246) do 

    create_table "directors", :force => true do |t| 
    t.string "director" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

    create_table "movies", :force => true do |t| 
    t.integer "director_id" 
    t.string "title" 
    t.string "rating" 
    t.integer "boxoffice" 
    t.datetime "created_at",  :null => false 
    t.datetime "updated_at",  :null => false 
    end 

end 

Показать контроллер директоров:

def show 
    @director = Director.find(params[:director_id]) 
    @movies = @director.movies 
    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @director } 
    end 
    end 

Я бы в конечном счете, хотел нажать на директор и посмотреть все фильмы, которые он или она, направленные, наряду с соответствующими рейтингами фильма и кассовых $. В настоящее время я получаю эту ошибку: Не удалось найти Директора без ID

Новое для Rails, поэтому я не уверен, как это решить. Это правильная настройка для того, что я хочу сделать? Если нет, как мне его изменить? Благодаря!

+0

'params [: director_id]' должно быть nil – Leito

ответ

1

Вы должны получить режиссер params[:id], а не с params[:director_id] Попробуйте это:

@director = Director.find(params[:id]) 

Чтобы увидеть все фильмы, что режиссер сделал сделать вложенную маршрут:

resources :directors do 
    resources :movies 
end 

Чтобы все действия работали в MovieController, вы должны следовать синтаксису вложенного маршрута. Найдите его здесь: http://guides.rubyonrails.org/routing.html или найдите рельсы для зомби 2 обучающих слайда в Интернете, его также хорошо объяснили там.

+0

Хороший улов, 'рейк-маршруты | grep 'director # show'' должен показать вам директиву GET /directors/:id(.format) директоров # show', ': id' - это имя параметра, заданного URL. – Leito

+0

Я просто хочу добавить: так как вы в контроллере директоров, это должны быть просто params [: id] – dorilla

+0

Спасибо, ребята, это было действительно полезно до сих пор! Следующий вопрос: в моем представлении режиссеров, что я должен включить, чтобы, когда я нажимаю ссылку на шоу режиссера, меня привлекают к его фильмам и т. Д.? Прямо сейчас, когда я нажимаю кнопку, это просто приводит меня к названию режиссера. – bork121