4

Studentという属性を持つ というモデルがありますUniversity_ID

次のリンクを介して特定の学生の詳細を表示するカスタム アクションとルートを作成しましたstudents/2/detailsstudents/:id/details

ただし、ユーザーがデータベースIDの代わりに大学IDを使用できるようにしたいので、たとえば次のように機能しますstudents/X1234521/detailsstudents/:university_id/details

ルートファイルは現時点では次のようになっています。

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

ただし、これはUniversity_IDではなくStudent_IDを使用しており、試してみました

match 'students/:university_id/details' => 'students#details', :as => 'details'ですが、これは University_ID ではなく Student_ID にのみ対応しています。

これが何らかの形で役立つ場合、私のコントローラーは次のようになります。

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

私もやってみ@student = Student.find(params[:university_id])ましたが、いや、何もうまくいきませんでした。

4

1 に答える 1

1

@teenOmar とチャットして要件を明確にした後、私たちが思いついたソリューションを次に示します。これにより、既存のstudents/:id/detailsルートが anidまたは a university_id( a で始まるw) を受け入れ、 abefore_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
于 2013-04-03T23:51:05.043 に答える