Ruby on rails Rails 4中的单表继承

Ruby on rails Rails 4中的单表继承,ruby-on-rails,ruby,ruby-on-rails-4,sti,Ruby On Rails,Ruby,Ruby On Rails 4,Sti,我正在尝试在Rails 4中实现一个稍微简单的STI,但有些东西我还无法实现 我有以下课程: class Person < ActiveRecord::Base end class NaturalPerson < Person end class LegalPerson < Person end class Employee < NaturalPerson end class Customer < NaturalPerson end class-Perso

我正在尝试在Rails 4中实现一个稍微简单的STI,但有些东西我还无法实现

我有以下课程:

class Person < ActiveRecord::Base
end

class NaturalPerson < Person
end

class LegalPerson < Person
end

class Employee < NaturalPerson
end

class Customer < NaturalPerson
end
class-Person

问题是,我有一些属性,我只想从Employee类访问,一些只想从Customer类访问,等等,但我找不到方法。如果我使用Rails 3的方式,我会用attr_Accessible解决它。但这现在不可能,因为我既不使用属性可访问的gem,也不愿意使用它。

我会在控制器中使用不同的person参数

def person_params
params.require(:person).permit(:email, :last_name, :first_name)
end

def natural_person_params
params.require(:person).permit(:email, :job, :location)
end
并创建一个方法,在其中我将测试object的类名或type属性(因为它是一个STI),以确定要使用的参数

希望这有帮助


干杯

如果您试图对所有模型使用单个控制器,请将所有属性放入白名单中的参数

def person_params
  params.require(:person).permit(:email, :last_name, :first_name, :job, :location)
end
如果要将它们分开,则需要为每种类型的人分别设置参数:

def person_params
  params.require(:person).permit(:email, :last_name, :first_name)
end

def employed_person_params
  params.require(:person).permit(:email, :job, :location)
end

如果我想在控制器之外创建一个人呢?这也可能吗?我对Rails比较陌生,所以这里可能有一个概念上的错误。谢谢再次阅读我的评论,我可能不太清楚。我的意思是,如果我想在控制器之外处理NaturalPerson的实例呢?我如何定义一个只能由NaturalPerson访问的属性?通过ActiveRecord处理Person属性的方式,Person的所有子级都可以访问所有属性。谢谢不确定,我还没有在Rails 4中测试STI(只是快速阅读文档)。