rails中多个路由的一个操作

时间:2014-09-03 07:45:38

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我是使用rails创建网页的新用户。我在路线铁路上遇到问题。我有3个型号。 StudentTeacherClass

Student 
  has_many class

Teacher
  has_many class

Class
  belongs_to student
  belongs_to teacher

在routes.rb中:

resources: students do
  resources: classes
end

resources: teachers do
  resources: classes
end

我打电话时出现问题

students/1/classes or teachers/1/classes

他们两个都打电话给

  

类控制器中的动作索引

我的目的是显示数据类取决于教师ID和数据类取决于学生ID

如何在致电

时创建差异
  

类控制器中的动作索引

由于

2 个答案:

答案 0 :(得分:1)

检查params是否存在如下:

def index
  if params[:student_id]
     @object = Student.find(params[:student_id])
  else
     @object = Teacher.find(params[:teacher_id])
  end
  @classes = @object.classes
end

答案 1 :(得分:0)

你有两个选择:

  
      
  1. 确定路线本身的选项
  2.   
  3. 使用conditional logic
  4. 识别控制器中的数据   

事实上,这两种方法都会使用分离逻辑 - 它只取决于哪种方法 您将如何确定如何确定输出:

#config/routes.rb
resources :students do
   resources :classes, model: "Student"
end

resources :teachers do
   resources :classes, model: "Teacher"
end

#app/controllers/classes_controller.rb
class ClassesController < ApplicationController
   before_action :set_parent, only: :index

   def index
      # @classes will already be set!
   end

   private

   def set_parent
      id = params[:student_id] || params[:teacher_id]
      if params[:model].exists?
         model = params[:model]
      else
         model = "Student" if params[:student_id]
         model = "Teacher" if params[:teacher_id]
      end
      @model = model.constantize
      @parent = @model.find id
      @classes = @parent.send model.lowercase.pluralize
   end
end