实现单表继承后损坏的Rails路由

时间:2010-12-13 19:48:42

标签: ruby-on-rails ruby routing single-table-inheritance ruby-on-rails-3

我已经为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。

路线需要进行哪些更改?

2 个答案:

答案 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模型,则不必对代码进行任何重大更新。