rails:为从超类inheritance的模型创建脚手架?

我是Rails的新手,仍然让我的脚湿透了,所以请原谅我,如果这是微不足道的或“做错事”。

我想为一些脚手架模型创建一个超类。 例如,我想为Men and for Women创建一个脚手架,但我希望它们都能从People超类inheritance; MenWomen会从人类inheritanceheightweight等领域。

我在哪里/如何定义这个People超类? 如何通过脚手架定义MenWomen的子类?

这是我考虑过用我的应用程序做的事情。 我还没有完成它,如果你是新手,我不会推荐它。 我要么完全制作单独的模型,要么创建一个模型,并且具有属性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 。 这个生成的模型inheritance自ActiveRecord::Base类。 inheritance标记小于符号( < )。

 # THESE WILL BE THE DEFAULT GENERATED MODELS class Men < ActiveRecord::Base end class Women < ActiveRecord::Base end 

然后,您将手动创建超类User

 class User < ActiveRecord::Base end 

然后编辑Men and Women模型以inheritanceUser

 # men.rb class Men < User end # women.rb class Women < User end 

假设您想要使用一个表进行子类化,您可以对该表进行迁移,然后将attr_accessible添加到相应的子类中。

attr_accessible是rails安全function。 它确定可以在质量分配中设置哪些属性。 任何与安全性,网站排名等相关的内容都不应该是可访问的。

例:

 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将决定哪种类型的用户可以设置什么。 显然,你可以通过在超类中放置共享function来解决这个问题。 希望这可以帮助

您还应该阅读super关键字和self关键字。 如果您运行inheritance的设置,您最终将要使用这些设置。

通常我做的事情如下:

 rails g scaffold People type:string name:string birth:date height:integer class People < ActiveRecord::Base end 

重要的是使用保留字'type'! 这就是表格将保持类的类型。 运行迁移。

因此,对于子类,您可以执行以下操作:

 rails g scaffold Men --parent=People 

结果男子:

 class Men < People end 

女性也一样:

 rails g scaffold Women --parent=People 

造成

 class Women < People end 

不会为子类生成迁移。 我不确定,但这种方法仅适用于STI。

希望能帮助到你!

AFAIK你需要调整现有的脚手架模板,我不相信有一种方法可以指定控制器基类。 也就是说,我认为在Rails 3中您可以将模板复制到$ROOT/lib/templates/rails/...其中...取决于您要更改的内容。

那就是说,在脚手架上做这个的真正目标是什么? 通常,模型将(a)很少是子类,(b)甚至更少是相同的子类。

只需手动编辑它们。

在单表inheritance上观看此截屏video。

http://railscasts.com/episodes/394-sti-and-polymorphic-associations


单表inheritance以及在Rails中使用它的位置