2

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

我有以下课程:

class Person < ActiveRecord::Base
end

class NaturalPerson < Person
end

class LegalPerson < Person
end

class Employee < NaturalPerson
end

class Customer < NaturalPerson
end

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

4

2 回答 2

4

我会在我的控制器中使用不同的 person_params,

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

并创建一个方法,我将在其中测试对象的类名或类型属性,因为它是 STI)以确定要使用的参数...

希望这可以帮助

干杯

于 2013-07-05T07:10:05.107 回答
3

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

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
于 2013-10-22T04:50:14.773 回答