2016-12-12 1 views
0

У меня две модели в рубине. Школа и курс.Рубин на рельсах. Ошибка с отношением в моделях

course модели есть:

belongs_to :school 

school модели есть:

has_many :courses 

Трассы:

Rails.application.routes.draw do 
resources :projects 
resources :schools 
resources :documents 
resources :courses 
resources :subjects 
resources :people 
resources :persontypes 
end 

метод создание курсов является:

def create 
@course = Course.new(course_params) 

if @course.save 
    redirect_to courses_path 
else 
    render 'new' 
end 
end 

Моя схема является:

create_table "courses", force: :cascade do |t| 
    t.text  "description" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.text  "name" 
    t.integer "code" 
    t.text  "initials" 
    t.integer "school_id" 
end 


create_table "schools", force: :cascade do |t| 
t.text  "description" 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
t.text  "name" 
t.integer "code" 
t.text  "initials" 
end 

создать школу. Но когда я пытаюсь создать курс, это дает мне ошибку: это говорит о том, что мне нужна школа.

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

Редакция:

Моего контроллер для удаления методы является

def destroy 
    @course = Course.find(params[:id]) 
    @course.destroy 

    redirect_to courses_path 
end 

При удалении курса, вместо курса удаляется, я перенаправлен на виде редактирование.

Это код для удаления ссылки:

<td><%= link_to 'Remover', course_path(course), 
method: :delete, 
data: { confirm: 'Tem a certeza que deseja eliminar este Curso?' } %></td> 

Является ли проблема маршрута?

+1

Можете ли вы добавить метод 'create' на свой' course_controller'? – araratan

+0

Пожалуйста, предоставьте часть кода, в котором вы получите эту ошибку. –

ответ

0

Вам нужно гнездовой конечно внутри школьных маршрутов:

Rails.application.routes.draw do 
    resources :schools do 
    resources :courses 
    end 
end 

В этом случае ваш сайт будет выглядеть /schools/1/courses/new.

Чем вам необходимо обновить ваш контроллер:

def create 
    @school = School.find(params[:school_id]) 
    @course = @school.courses.new(course_params) 
    #... 
end 

В случае, если вам нужно выбрать школу из выпадающего списка просто добавьте выберите форму ввода.

Вот отличный документ: http://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-select

Update Конечно форма создания (наивная реализация):

#... 
<%= f.select :school_id, School.all.collect { |s| [s.name, s.id] }, include_blank: true %> 
#... 

И вы определенно должны белый список school_id параметров в контроллере.

+0

Но как я могу, например, поместить список в new.html.erb для, когда вы создаете курс, можете выбрать желаемую школу –

+0

Я поставил вот так: ---------------------------- --------- Rails.application.routes.draw сделать ресурсов: проекты #Resources: школы ресурсов: документы #Resources: курсы ресурсов Испытуемых ресурсов: люди ресурсов: persontypes Ресурсы: школы Ресурсы: курсы конец ------------------------------------- , но это дает мне ошибку: нет совпадений в маршруте [GET] "/ курсы" –

+0

Ваши маршруты будут выглядеть так: '/ schools /: school_id/courses' –