我是Rails的新手,还在摸索,所以如果这是琐碎的或者“错误的方式”,请原谅我。
我想为一些脚手架模型创建一个超类。例如,我想为Men和Women创建一个脚手架,但是我希望它们都从People超类继承;Men和Women将从People类继承像height和weight这样的字段。
在哪里/如何定义这个People超类?如何通过脚手架定义Men和Women子类?
发布于 2013-04-07 00:41:11
这是我想过要用我的应用程序做的事情。我还没有这样做,如果你是rails的新手,我不推荐你这样做。我要么创建完全独立的模型,要么创建一个模型,并让属性gender (应该是0或1 ),然后创建一个返回相应性别字符串的方法。
编辑
所以我打开了rails控制台,从我所看到的情况来看,这是完全可能的,你所需要做的就是声明类,如果你想使用不同的表,set_table_name
class This < That
set_table_name :this
end
class There < This
set_table_name :there
end或者你可以用一张桌子,但如果你想保持干燥,我会用两张桌子。
如果你想使用脚手架生成器,你必须为你想要查看的每个类(男人和女人)运行典型的rails g scaffold Men。此操作生成的模型继承自ActiveRecord::Base类。继承标记是小于符号(<)。
# THESE WILL BE THE DEFAULT GENERATED MODELS
class Men < ActiveRecord::Base
end
class Women < ActiveRecord::Base
end然后手动创建超类User
class User < ActiveRecord::Base
end然后编辑Men和Women模型以从User继承
# men.rb
class Men < User
end
# women.rb
class Women < User
end假设您想使用一个表创建子类,您可以对该表进行正确的迁移,然后将attr_accessible添加到适当的子类中。
attr_accessible是rails的安全特性。它决定了哪些属性可以在批量分配中设置。任何与安全,网站排名等相关的东西都不应该被访问。
示例:
attr_accessible :favorite_food, :interests, :password, :email # THIS IS GOOD
attr_accessible :admin, :has_access_to_missile_launch_codes # THIS IS BAD因为这样就会有人通过
params => { :man => { :admin => true }}
要点是,使用这些attr_accessible将决定哪种类型的用户可以设置什么。显然,您可以通过将共享功能放在超类中来使其枯竭。希望这能有所帮助
您还应该阅读有关super关键字和self关键字的内容。如果你运行的是一个继承的安装程序,你最终会想要使用它们。
https://stackoverflow.com/questions/15853334
复制相似问题