4

我有一個名爲Student的模型,其中有一個名爲University_ID的屬性。創建使用模型屬性代替Rails中的ID的自定義路線

我創建了一個自定義操作和路由其中通過以下鏈接顯示特定學生的詳細信息:students/2/detailsstudents/:id/details

不過,我希望能夠允許用戶使用他們的大學ID,而不是數據庫ID,這樣下將工作例如students/X1234521/detailsstudents/: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路線能夠接受的iduniversity_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

或者試試'#學生find_by_university_id(PARAMS [:univeristy_id])'。 'Student#where'(university_id:params [:university_id])'將返回一組學生。 – 2013-04-03 23:54:25

+0

@JimStewart我在這個代碼中加入了一個動作:'@student = Student.where(university_id:params [:university_id])。first'? – omarArroum 2013-04-03 23:56:01

+0

沒有辦法讓它互換,即我可以使用'student_id'或'university_id'嗎? – omarArroum 2013-04-03 23:59:54

相關問題