我有一个名为Student
的模型,其中包含一个名为University_ID
的属性。
我创建了一个自定义动作和路线,通过以下链接显示特定学生的详细信息:students/2/details
即。 students/:id/details
但是,我希望能够允许用户使用他们的大学ID而不是数据库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])
但是没有,没有任何效果。
答案 0 :(得分: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