我已经为person类实现了单表继承
class Person < ActiveRecord::Base
end
class Teacher < Person
end
class Student < Person
end
class Outsider < Person
end
创建人员似乎根据在form.select中选择的内容创建了Teacher,Student或Person,并添加了type属性。
然而,我似乎打破了路线
&lt;%= link_to'Edit',edit_person_path(@ deal)%&gt; | &lt;%= link_to'Back',persons_path%&gt;
他们似乎指向teacher_path,student_path和outsider_path而不是person_path。
路线需要进行哪些更改?
答案 0 :(得分:2)
首先为您的模型生成控制器......
rails generate controller Persons
rails generate controller Teachers
rails generate controller Students
rails generate controller Outsiders
然后在routes.rb(rails 3)
resources :persons
resources :teachers
resources :students
resources :outsiders
为您提供REST路线
e.g。
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老师
答案 1 :(得分:1)
根据我的经验,最好为所有STI型号使用单个控制器。如果您将控制器保持为DRY,则不需要为每个子类具有唯一的控制器逻辑。保留模型中的所有内容。
resources :people
您的指定路线如下:
people_path
new_person
edit_person
person
etc...
然后您可以使用相同的控制器/视图来管理这些模型。如果您稍后决定添加新的Person STI模型,则不必对代码进行任何重大更新。