【问题标题】:One action for multiple routes in railsRails 中多条路线的一项操作
【发布时间】:2014-10-27 15:16:42
【问题描述】:

我是使用 Rails 创建 Web 的新用户。我在路线轨道上遇到问题。我有 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

调用时如何创建差异

类控制器中的动作索引

?

谢谢

【问题讨论】:

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


【解决方案1】:

检查参数的存在如下:

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

【讨论】:

    【解决方案2】:

    您有两个选择:

    1. 在路由本身中识别选项
    2. 使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      • 2017-02-26
      • 2021-08-12
      • 2019-04-20
      相关资源
      最近更新 更多