我是使用rails创建网页的新用户。我在路线铁路上遇到问题。我有3个型号。 Student
,Teacher
和Class
。
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
如何在致电
时创建差异类控制器中的动作索引
由于
答案 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)
你有两个选择:
- 确定路线本身的选项
- 使用conditional logic
识别控制器中的数据 醇>
事实上,这两种方法都会使用分离逻辑 - 它只取决于哪种方法 您将如何确定如何确定输出:
#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