【问题标题】:Redirect_to rails 4 - could not find by lecture idRedirect_to rails 4 - 无法通过讲座 ID 找到
【发布时间】:2015-08-18 20:22:07
【问题描述】:

我的模型

  class Course
       has_many :lessons, through: :chapters
end

class Lesson
  belongs_to :chapter
  has_one :course, through: :chapter
end

class User
  has_many :user_lessons
end

class UserLesson
   #fields: user_id, lesson_id, completed(boolean)  
   belongs_to :user
   belongs_to :lesson
end

class Chapter 
   has_many :lessons
   belongs_to :course
end 

我的 UserLesson 控制器:

 class UserLessonsController < ApplicationController
   before_filter :set_user_and_lesson
   def create
     @user_lesson = UserLession.create(user_id: @user.id, lession_id:    @lesson.id, completed: true)
if @user_lesson.save
  # redirect_to Course show action///// How can I redirect to that?
else
  # take the appropriate action
end
  end
 end

基本上我想要的是重定向到有课程的课程的表演动作? (基本上是回到整个课程列表。课程嵌套在课程中)问题是找不到讲座ID。

No route matches {:action=>"show", :controller=>"lectures", :id=>nil}    missing required keys: [:id]

Routes.rb

  resources :courses do 

      resources :lessons

  end

   resources :user_lessons

发送数据到创建方法的链接

   <%= link_to 'Back to Lesson list', user_lessons_path(@user_lesson, user_lesson: {user_id: 'current_user.id', lesson_id: 'lesson.id'}), :method => :post, data: {confirm: 'are you sure?'} %>

【问题讨论】:

  • 你的 routes.rb 是什么样的?此外,您可能希望运行“rake routes”以查看路由名称以及它们需要的参数(如果有)
  • 资源:课程做资源:课程结束
  • 我用路由 rb 编辑了帖子。
  • 这不在问题范围内,但仅供参考,我注意到您在多个地方使用了“lession”,我觉得应该是“教训”。怎么样,redirect_to @lesson.course
  • 我收到了这个错误未定义的课程方法

标签: ruby-on-rails redirect routes nested-routes


【解决方案1】:
redirect_to lessons_path(@user_lesson)

但您应该在 UserLessons 控制器中定义显示操作。

【讨论】:

    【解决方案2】:

    我会这样做: 修改课目

    class Lesson
      belongs_to :chapter
      has_one :course, through: :chapter #changed from :lecture since it's nowhere in your model structure
    end
    

    那么你可以使用

    redirect_to @lesson.course
    

    重定向到课程的课程

    希望我做对了 :)

    编辑:我看到您在多个场合提到过讲座,但在您提供的内容中找不到它......所以我假设它现在是 Course ? :)

    如果是这样的话……也改一下

    class Chapter 
      has_many :lessons
      belongs_to :course # was lecture
    end 
    

    【讨论】:

      【解决方案3】:

      在您的redirect_to 方法中传递id

      redirect_to :controller=>'courses', :action => 'show', :id => @user_lesson.lesson.course.id
      

      问题编辑后更新:

      改变这个:

         <%= link_to 'Back to Lesson list', user_lessons_path(@user_lesson, user_lesson: {user_id: 'current_user.id', lesson_id: 'lesson.id'}), :method => :post, data: {confirm: 'are you sure?'} %>
      

      到:

         <%= link_to 'Back to Lesson list', user_lessons_path(@user_lesson, user_lesson: {user_id: current_user.id, lesson_id: lesson.id}), :method => :post, data: {confirm: 'are you sure?'} %>
      

      这基本上改变了这一点:

      user_lesson: {user_id: 'current_user.id', lesson_id: 'lesson.id'}
      

      到:

      user_lesson: {user_id: current_user.id, lesson_id: lesson.id}
      

      看看有没有用。

      【讨论】:

      • 我实际上正在重定向到另一个控制器:courses_controller.rb,问题是它没有找到课程ID,因为它没有通过。
      • 对,所以你需要将 course_id 传递给那个控制器。
      • nil 的未定义方法“课程”:NilClass 似乎无法理解原因
      • 你需要:@user_lesson.lesson.course.id 这应该可以工作
      • 我仍然有消息错误。我的猜测是,lecture_id 永远不会传递给控制器​​ UserLessons。我使用将数据传递给控制器​​的链接编辑了帖子。
      猜你喜欢
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多