2014-09-03 4 views
0

Я новый пользователь в создании сети с использованием рельсов. У меня проблемы с маршрутами. У меня 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

Как я могу создать различия, когда его называют

индекс действия в контроллере класса

?

Благодаря

+2

тот же вопрос здесь http://stackoverflow.com/questions/25611621/nested-resources-sharing-same-controller – IS04

+0

В какой версии вы точно используете Rails 3 или 4 ?? – Surya

ответ

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 
0

двух вариантов, у вас есть следующие:

  1. Определить возможность в самой
  2. маршрутов Определите данные в вашем контроллере с помощью conditional logic

На самом деле, оба из этих методов будет использовать conidtional логика - это просто зависит от того, какой метод вы используете, как вы будете определять, как определить выход:

#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