我是Ruby on Rails的新手。我正面临使用嵌套资源的问题。没有路由匹配{:action =>“new”,:controller =>“lessons”}缺少必需的键:[:course_id]
我正在构建一个学习应用程序,其中有课程和课程。 每门课程都有很多课程,一门课程只属于一门课程。
目前我无法为课程创建课程。
示例:http://localhost:3000/courses/19/lessons/new是一个页面,我想创建和显示教训当然19.
的routes.rb
Rails.application.routes.draw do
devise_for :users
resources :courses
resources :courses do
resources :lessons
end
resources :lessons
root 'pages#landing'
get 'pages/home' => 'pages#home' ,as: :home
get '/user/:id' => 'pages#profile',as: :profile
get '/users' => 'courses#index',as: :user_root
end
Course.rb
class Course < ActiveRecord::Base
belongs_to :user
has_many :lesson
validates :user_id , presence: true
end
Lesson.rb
class Lesson < ActiveRecord::Base
belongs_to :course
validates :course_id , presence: true
end
CourseController.rb
class CoursesController < ApplicationController
def index
@courses = Course.all;
end
def new
@course = Course.new;
end
def create
@course = Course.new(course_params);
@course.user_id = current_user.id;
if @course.save
redirect_to course_path(@course)
else
flash[:notice]="Course could not be created ! "
redirect_to new_course_path
end
end
def edit
end
def update
end
def destroy
@course = Course.find(params[:id]);
@course.destroy;
end
def show
@course = Course.find(params[:id]);
end
private
def course_params
params.require(:course).permit(:title, :description, :user_id)
end
end
LessonController.rb
class LessonsController < ApplicationController
def index
@lessons = Lesson.all;
end
def new
@lesson = Lesson.new;
end
def create
@lesson = Lesson.new(lesson_params);
@course = Course.find_by(id: [params[:course_id]]);
if @lesson.save
redirect_to new_course_lesson_path , flash[:notice] = "Lesson successfully saved !"
else
redirect_to new_course_lesson_path , flash[:notice] = "Lesson cannot be created ! "
end
end
def show
@lesson = Lesson.find(params[:id])
end
private
def lesson_params
params.require(:lesson).permit(:title,:description,:video,:course_id)
end
end
Lessonform.html.erb
<%= form_for ([@course,@lesson]) do |f| %>
<%= f.label :lesson_Title %>
<%= f.text_field :title ,placeholder: "Enter the lesson Title" ,:class=>"form-control" %><br />
<%= f.label :Description %>
<%= f.text_area :description ,placeholder: "Enter the lesson Description",rows:"8",:class=>"form-control" %><br />
<center>
<%= f.submit "Create lesson",:class =>"btn btn-lg btn-primary" %>
</center>
<% end %>
资源:我做过两次的课程,因为如果我删除第二个资源:课程,它会给我一个lessons_path找不到的错误。 感谢您的帮助,我会尝试一下@JagdeepSingh –
我与模型 –
另一件事的建议再次编辑它,你可以跳过所有的“分号”红宝石 –