Ruby on rails 不能';我找不到有';id'=
我有一个嵌套的资源,我正试图用嵌套的资源创建一个表单。新页面可以正常工作,但当我尝试访问该节目时,屏幕上的标题出现了错误。这是我的密码: routes.rbRuby on rails 不能';我找不到有';id'=,ruby-on-rails,Ruby On Rails,我有一个嵌套的资源,我正试图用嵌套的资源创建一个表单。新页面可以正常工作,但当我尝试访问该节目时,屏幕上的标题出现了错误。这是我的密码: routes.rb resources :courses do resources :lessons, shallow:true end class LessonsController < ApplicationController before_action :set_lesson, only: [:show, :edit, :update,
resources :courses do
resources :lessons, shallow:true
end
class LessonsController < ApplicationController
before_action :set_lesson, only: [:show, :edit, :update, :destroy]
before_filter(:get_course)
# GET /lessons
# GET /lessons.json
def index
@lessons = Lesson.all
end
# GET /lessons/1
# GET /lessons/1.json
def show
end
# GET /lessons/new
def new
@lesson = Lesson.new
end
# GET /lessons/1/edit
def edit
end
# POST /lessons
# POST /lessons.json
def create
@course = Course.find(params[:course_id])
@lesson = Lesson.new(:course=>@course)
respond_to do |format|
if @lesson.save
format.html { redirect_to @lesson, notice: 'Lesson was successfully created.' }
format.json { render :show, status: :created, location: @lesson }
else
format.html { render :new }
format.json { render json: @lesson.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /lessons/1
# PATCH/PUT /lessons/1.json
def update
respond_to do |format|
if @lesson.update(lesson_params)
format.html { redirect_to @lesson, notice: 'Lesson was successfully updated.' }
format.json { render :show, status: :ok, location: @lesson }
else
format.html { render :edit }
format.json { render json: @lesson.errors, status: :unprocessable_entity }
end
end
end
# DELETE /lessons/1
# DELETE /lessons/1.json
def destroy
@lesson.destroy
respond_to do |format|
format.html { redirect_to lessons_url, notice: 'Lesson was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_lesson
@lesson = Lesson.find(params[:id])
end
def get_course
@course = Course.find(params[:course_id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def lesson_params
params.require(:lesson).permit(:code, :course_id)
end
end
课程\u控制器.rb
resources :courses do
resources :lessons, shallow:true
end
class LessonsController < ApplicationController
before_action :set_lesson, only: [:show, :edit, :update, :destroy]
before_filter(:get_course)
# GET /lessons
# GET /lessons.json
def index
@lessons = Lesson.all
end
# GET /lessons/1
# GET /lessons/1.json
def show
end
# GET /lessons/new
def new
@lesson = Lesson.new
end
# GET /lessons/1/edit
def edit
end
# POST /lessons
# POST /lessons.json
def create
@course = Course.find(params[:course_id])
@lesson = Lesson.new(:course=>@course)
respond_to do |format|
if @lesson.save
format.html { redirect_to @lesson, notice: 'Lesson was successfully created.' }
format.json { render :show, status: :created, location: @lesson }
else
format.html { render :new }
format.json { render json: @lesson.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /lessons/1
# PATCH/PUT /lessons/1.json
def update
respond_to do |format|
if @lesson.update(lesson_params)
format.html { redirect_to @lesson, notice: 'Lesson was successfully updated.' }
format.json { render :show, status: :ok, location: @lesson }
else
format.html { render :edit }
format.json { render json: @lesson.errors, status: :unprocessable_entity }
end
end
end
# DELETE /lessons/1
# DELETE /lessons/1.json
def destroy
@lesson.destroy
respond_to do |format|
format.html { redirect_to lessons_url, notice: 'Lesson was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_lesson
@lesson = Lesson.find(params[:id])
end
def get_course
@course = Course.find(params[:course_id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def lesson_params
params.require(:lesson).permit(:code, :course_id)
end
end
class lessonscoontroller@course)
回应待办事项|格式|
如果@lesson.save
format.html{将_重定向到@lessue,注意:'已成功创建课程。}
format.json{render:show,status::created,location:@lesson}
其他的
format.html{render:new}
format.json{render json:@lesson.errors,status::unprocessable_entity}
结束
结束
结束
#补丁/放置/课程/1
#PATCH/PUT/lessons/1.json
def更新
回应待办事项|格式|
如果@lesson.update(lesson_参数)
format.html{将_重定向到@lessure,注意:'lessure已成功更新。}
format.json{呈现:显示,状态::确定,位置:@lesson}
其他的
format.html{render:edit}
format.json{render json:@lesson.errors,status::unprocessable_entity}
结束
结束
结束
#删除/课程/1
#删除/lessons/1.json
def销毁
@毁灭
回应待办事项|格式|
format.html{重定向到课程url,注意:'课程已成功销毁。}
format.json{head:no_content}
结束
结束
私有的
#使用回调在操作之间共享公共设置或约束。
def set_课程
@lesson=lesson.find(参数[:id])
结束
def get_课程
@course=course.find(参数[:course\u id])
结束
#永远不要相信来自恐怖网络的参数,只允许白名单通过。
def参数
参数要求(:课程).permit(:代码,:课程id)
结束
结束
如果我还需要补充什么,请告诉我。谢谢
当我试图进入节目时
大概是因为您在routes.rb中定义了shallow:true
,所以您正在向类似/lessons/1
的内容发出请求。注意过滤器的顺序:
before_action :set_lesson, only: [:show, :edit, :update, :destroy]
before_filter(:get_course)
过滤器按其定义的顺序运行。在这种情况下,set\u课程
过滤器在get\u课程
过滤器之前运行。当执行get_course
过滤器时,它将尝试在params散列中查找课程id。对于“浅”路线,该参数不存在,因此params[:course_id]
将为nil
。因此
Course.find(参数[:Course\u id])
引发了一个异常
对于“浅”管线,嵌套资源的ID(课程)是所需的全部。更改课程筛选器以排除“显示”操作:
before\u过滤器:获取课程,除了::show
或者不要使用浅路线
另外,
before\u action
比before\u filter
更可取。您可以用参数为错误添加日志文件条目吗?发布您的rake routes
before\u action:get\u course,除了::index