5

個人クラスの単一テーブル継承を実装しました

class Person < ActiveRecord::Base

end


class Teacher < Person

end

class Student < Person

end

class Outsider < Person

end

そして create person は form.select で選択されたものに応じて Teacher、Student、または Person を作成し、 type 属性が追加されているようです。

しかし、私はルートを壊したようです

<%= link_to 'Edit', edit_person_path(@deal) %> | <%= link_to 'Back', person_path %>

それらは、person_path の代わりに teacher_path、student_path、および outsider_path を指しているようです。

ルートにどのような変更を加える必要がありますか?

4

2 に答える 2

2

最初にモデルのコントローラーを生成します...

rails generate controller Persons
rails generate controller Teachers
rails generate controller Students
rails generate controller Outsiders

次に、routes.rb(レール3)で

resources :persons
resources :teachers
resources :students
resources :outsiders

RESTルートを提供します

例えば

persons GET    /persons(.:format) {:action=>"index", :controller=>"persons"}
new_person GET    /person/new(.:format) {:action=>"new", :controller=>"persons"}
edit_person GET    /persons/:id/edit(.:format) {:action=>"edit", :controller=>"persons"}
person GET    /persons/:id(.:format) {:action=>"show", :controller=>"persons"} 
persons POST   /spersons(.:format) {:action=>"create", :controller=>"persons"}    
person PUT    /persons/:id(.:format) {:action=>"update", :controller=>"persons"}    
person DELETE /persons/:id(.:format) {:action=>"destroy", :controller=>"persons"}

教師、生徒、部外者も同じ

レーキ ルートまたはレーキ ルートを確認する | grep 教師

于 2010-12-13T20:17:44.027 に答える
1

私の経験から言えば、すべての STI モデルに対して 1 つのコントローラーを使用する方が適切です。コントローラーを DRY に保つ場合は、子クラスごとに固有のコントローラー ロジックを用意する必要はありません。そのすべてをモデルに保持します。

resources :people

名前付きルートは次のようになります。

people_path
new_person
edit_person
person
etc...

その後、同じコントローラー/ビューを使用してこれらのモデルを管理できます。後で新しい Person STI モデルを追加することにした場合、コードを大幅に更新する必要はありません。

于 2010-12-13T23:58:43.623 に答える