all*_*rry 5 ruby model ruby-on-rails scaffolding ruby-on-rails-3
我是Rails的新手,仍然让我的脚湿透了,所以请原谅我,如果这是微不足道的或"做错事".
我想为一些脚手架模型创建一个超类.例如,我想为for Men和for 创建一个脚手架Women,但我希望它们都从People超类继承; Men并且Women将继承领域,如height和weight从People类.
我在哪里/如何定义这个People超类?如何定义子类Men和Women通过脚手架?
通常我会做类似的事情:
rails g scaffold People type:string name:string birth:date height:integer
class People < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)
重要的是使用保留字“类型”!这就是表将保存类的类型的地方。运行迁移。
因此,对于子类,您可以执行以下操作:
rails g scaffold Men --parent=People
Run Code Online (Sandbox Code Playgroud)
由此产生的男性:
class Men < People
end
Run Code Online (Sandbox Code Playgroud)
女性也一样:
rails g scaffold Women --parent=People
Run Code Online (Sandbox Code Playgroud)
结果
class Women < People
end
Run Code Online (Sandbox Code Playgroud)
不会为子类生成迁移。我不确定,但这种方法只适用于性传播感染。
希望能帮助到你!
这是我在我的应用程序中考虑过的事情。我还没有这样做,如果你是 Rails 新手,我不会推荐它。我要么完全创建单独的模型,要么创建一个模型,并具有属性gender,该属性应该是 0 或 1,然后创建一个返回相应性别字符串的方法。
编辑
所以我打开了rails控制台,从我所看到的,这是完全可能的,你需要做的就是声明类,如果你想使用不同的表,set_table_name
class This < That
set_table_name :this
end
class There < This
set_table_name :there
end
Run Code Online (Sandbox Code Playgroud)
或者你可以使用一张桌子,但如果你想保持干燥,我会使用两张桌子。
如果您想使用脚手架生成器,则必须rails g scaffold Men为您想要查看的每个类别(男性和女性)运行典型。这生成的模型继承自该类ActiveRecord::Base。继承标记是小于号(<)。
# THESE WILL BE THE DEFAULT GENERATED MODELS
class Men < ActiveRecord::Base
end
class Women < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)
然后您将手动创建超类User
class User < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)
然后编辑Men和Women模型以继承User
# men.rb
class Men < User
end
# women.rb
class Women < User
end
Run Code Online (Sandbox Code Playgroud)
假设您想使用一个表进行子类化,您可以正确该表的迁移,然后将其添加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
Run Code Online (Sandbox Code Playgroud)
因为这样有人就可以通过破坏你的安全系统
params => { :man => { :admin => true }}
要点是,使用这些attr_accessible将确定哪种类型的用户可以设置什么。显然,您可以通过将共享功能放入超类中来干燥它。希望这可以帮助
您还应该阅读有关super关键字和self关键字的信息。如果您运行继承的设置,您最终会想要使用它们。
| 归档时间: |
|
| 查看次数: |
2663 次 |
| 最近记录: |