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

相关问题