0

私のアプリには、ユーザーモデル、学校モデル、コースモデル、シラバスモデルがあります。ユーザーまたは学校は、ポリモーフィックな関連付け(coursebelongs_to:hostable、およびschool / user has_many:courses、as :: hostable)を介して設定したコース、およびコースhas_1シラバスを作成できます。私の質問は、シラバスモデルもネストされているネストされたコースモデルのルートを構成する方法です。

resources :users do
  resources :courses do
   resources :syllabus
  end 
    member do
    put :enroll
   end
  end

 resources :schools do
  resources :courses do 
   resources :syllabuses
  end
   member do
  put :apply, :enroll
  end
end

したがって、ユーザーはコースページのボタンをクリックしてコースに登録できます。私のコースコントローラーでは、次のようになっています。

def enroll
  @course = Course.find(params[:id])
  current_user.coursegroups.create(host_course_id: @course.id, role: 'applicant')
  respond_with @course
end

だから、これは私のルートを設定する正しい方法ですか?

4

1 に答える 1

1

1 レベル以上の深さでリソースをネストすることに注意する必要があるという Stefan の意見は正しいですが、個人的には 2 レベルまでネストを管理できないとは思いません。いずれにせよ、それは単なる個人的な好みです。

あなたのルートについて、私がすぐに思いつくのは、ユーザーまたは学校としてログインしているように聞こえるため、ユーザーおよび学校内にすべてをネストする必要がないということです。ログインしたユーザーが含まれるルートは管理が非常に困難です。ユーザーはそれらを共有できず、指定されたリソースの状態を実際には反映していません。例えば:

/users/1/courses/14/syllabus/3

理論的にcourses/14/syllabus/3は、ログインしているすべてのユーザーに対して同じように機能するはずですが、これへのリンクを共有しようとする人は、最初に自分のユーザー ID 番号を含める必要がありますが、これはややばかげています。代わりに、ルートを次のように構成します。

resource :sessions
resources :courses do
  resources :syllabus
  member do
    put :apply, :enroll
  end
end

セッションで、ユーザーまたは学校のいずれかがログインできるようにし、CanCanなどを使用してログインしているユーザーに基づいて、ビューに表示される内容 (およびアクセスが許可されるリソース) を変更します。これで、ルートは実際のリソース ( /courses/14/syllabus/3) を正しく反映します。

于 2012-06-28T15:26:00.463 に答える