2016-12-12 18 views
0

ルビーには2つのモデルがあります。学校とコース。Ruby on Rails。モデルの関係でエラーが発生しました

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 

私は学校を作成します。しかし、私がコースを作成しようとすると、それは私にエラーを与えます:それは私が学校が必要と言うことです。

すでに両方のモデルが関連していますが、コースの作成ビューにどのコースがどのコースに属するのかを選択するにはどうすればよいですか?

EDITED:私はコースを削除すると、削除方法について

私のcontrolerは、代わりに削除され、もちろん、私は、ビューの編集に

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

あなたの 'courses_controller'に' create'メソッドを追加してください。 – araratan

+0

このエラーが発生するコードの一部を入力してください。 –

答えて

0

あなたは通学路の内側に巣のコースに必要があります:

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

その場合は、あなたのURLは/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

アップデートコースの作成フォーム(ナイーブな実装):ここで

は素晴らしいドキュメントです

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

そして、あなたは間違いなくあなたのコントローラでschool_idのparamをホワイトリストに登録する必要があります。

+0

しかし、私は例えばnew.htmlにリストを入れることができます。あなたが私がコースを作成するときに、希望の学校を選択することができます。 –

+0

私はこのように置いています: ---------------------------- --------- Rails.application.routes.draw行う リソース:プロジェクト #resources:学校 リソース:ドキュメント #resources:コース 資源:人 リソース:persontypes リソースを施し、 リソース:学校do リソース:コース end ------------------------------------- それは私にエラーをもたらします: [/ GET] "/ courses" –

+0

あなたのルートは次のようになります: '/ schools /:school_id/courses' –

関連する問題