5
私は人のクラス

壊れRailsのルートの単一テーブル継承を実装した後

class Person < ActiveRecord::Base 

end 


class Teacher < Person 

end 

class Student < Person 

end 

class Outsider < Person 

end 

のための単一テーブル継承を実装していると作成者は、フォームで選択されている内容に応じて教師、学生や人を作成し動作するようです

.selectとtype属性が追加されました。 |

はしかし、私はルート

<% =のlink_to '編集'、edit_person_path(@deal)%>が壊れているように見えます <%= link_to 'Back'、persons_path%>

person_pathの代わりにteacher_path、student_path、outsider_pathを指しているようです。

ルートにはどのような変更が必要ですか? routes.rbを中そして

答えて

2

まず、あなたのモデルのためのコントローラを生成する...

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

(レール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の教師

+2

私はあなたがREST は、routes.rbを 試合で「教師/」=>「人物の#インデックス」を追加失うことになる各1 – Arc

+0

ための異なるコントローラにしたいいけない:教師 マッチ「教師/:=>のように:教師 など... – codevoice

+1

これは動作しますが、DRYはまったくありません。すべてのコントローラコードが繰り返し表示されますが、各サブクラスのビューコードは何度も繰り返されます – Tilo

1

私の経験から、すべてのSTIモデルに1つのコントローラを使用する方が良いでしょう。コントローラーをDRY状態にしておく場合は、各子クラスに固有のコントローラー・ロジックを持つ必要はありません。すべてのモデルをモデルに保存します。そして、あなたはこれらのモデルを管理するために、同じコントローラ/ビューを使用することができます

people_path 
new_person 
edit_person 
person 
etc... 

resources :people 

あなたの名前のルートは次のようになります。後で新しいPerson STIモデルを追加することに決めた場合、コードを大幅に更新する必要はありません。

+2

これはうまくいきません。 edit_person_path(@deal)%> edit_teacher_path(@user)を検索しようとしましたが、 – Arc

+0

はこれで今自分自身と苦労していました。ビュー内でサブモデルを大幅に違うものにしたいコントローラーまたはビューのいずれかに条件ロジックの束を持たない方がいいでしょう。 –

関連する問題