4

У меня есть модель с именем Student, которая имеет в ней атрибут University_ID.Создание пользовательских маршрутов, в которых вместо идентификатора используется атрибут модели в Rails

Я создал пользовательское действие и маршрут, который отображает деталь конкретного учащегося по следующей ссылке: students/2/details т.е. students/:id/details

Однако, я хочу, чтобы иметь возможность позволить пользователю использовать университетский ID вместо идентификатор базы данных, так что следующий будет работать, например students/X1234521/details т.е. students/:university_id/details

Мой файл маршрут выглядит следующим образом на данный момент:

resources :students 
match 'students/:id/details' => 'students#details', :as => 'details' 

Однако это использует Student_ID в отличие от University_ID, и я пробовал делать

match 'students/:university_id/details' => 'students#details', :as => 'details', но это соответствует только идентификатору Student_ID, а не идентификатору University_ID.

Мой контроллер выглядит так, если это поможет в любом случае:

def details 
    @student = Student.find(params[:id]) 
end 

Я также пытался делать @student = Student.find(params[:university_id]) но нет, ничего не получалось.

ответ

1

После беседы с @teenOmar уточнить требования, вот решение, которое мы придумали, что позволяет существующему students/:id/details маршрута принять либо id или university_id (который начинается с w), и использует before_filter для заполнить @student для использования в различных действиях контроллера:

class StudentsController < ApplicationController 

    before_filter :find_student, only: [:show, :edit, :update, :details] 

    def show 
    # @student will already be loaded here 
    # do whatever 
    end 

    # same for edit, update, details 

private 

    def find_student 
    if params[:id] =~ /^w/ 
     @student = Student.find_by_university_id(params[:id]) 
    else 
     @student = Student.find(params[:id]) 
    end 
    end 

end 
+2

Или попробуйте 'Student # find_by_university_id (Params [: univeristy_id])'. 'Student # where (university_id: params [: university_id])' вернет массив студентов. –

+0

@JimStewart, в каком действии я помещаю этот код: '@student = Student.where (university_id: params [: university_id]). First'? – omarArroum

+0

Не существует способа его взаимозаменяемости i.e Я могу либо использовать 'student_id', либо' university_id'? – omarArroum

Смежные вопросы