首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >rails:为模型创建从超类继承的脚手架?

rails:为模型创建从超类继承的脚手架?
EN

Stack Overflow用户
提问于 2013-04-07 00:36:40
回答 4查看 3.4K关注 0票数 6

我是Rails的新手,还在摸索,所以如果这是琐碎的或者“错误的方式”,请原谅我。

我想为一些脚手架模型创建一个超类。例如,我想为MenWomen创建一个脚手架,但是我希望它们都从People超类继承;MenWomen将从People类继承像heightweight这样的字段。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-07 00:41:11

这是我想过要用我的应用程序做的事情。我还没有这样做,如果你是rails的新手,我不推荐你这样做。我要么创建完全独立的模型,要么创建一个模型,并让属性gender (应该是0或1 ),然后创建一个返回相应性别字符串的方法。

编辑

所以我打开了rails控制台,从我所看到的情况来看,这是完全可能的,你所需要做的就是声明类,如果你想使用不同的表,set_table_name

代码语言:javascript
运行
复制
class This < That
  set_table_name :this
end

class There < This
   set_table_name :there
end

或者你可以用一张桌子,但如果你想保持干燥,我会用两张桌子。

如果你想使用脚手架生成器,你必须为你想要查看的每个类(男人和女人)运行典型的rails g scaffold Men。此操作生成的模型继承自ActiveRecord::Base类。继承标记是小于符号(<)。

代码语言:javascript
运行
复制
# THESE WILL BE THE DEFAULT GENERATED MODELS
class Men < ActiveRecord::Base

end

class Women < ActiveRecord::Base

end

然后手动创建超类User

代码语言:javascript
运行
复制
class User < ActiveRecord::Base

end

然后编辑MenWomen模型以从User继承

代码语言:javascript
运行
复制
# men.rb
class Men < User
end

# women.rb
class Women < User
end

假设您想使用一个表创建子类,您可以对该表进行正确的迁移,然后将attr_accessible添加到适当的子类中。

attr_accessible是rails的安全特性。它决定了哪些属性可以在批量分配中设置。任何与安全,网站排名等相关的东西都不应该被访问。

示例:

代码语言:javascript
运行
复制
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关键字的内容。如果你运行的是一个继承的安装程序,你最终会想要使用它们。

票数 3
EN

Stack Overflow用户

发布于 2017-06-20 11:04:18

通常我会这样做:

代码语言:javascript
运行
复制
rails g scaffold People type:string name:string birth:date height:integer

class People < ActiveRecord::Base
end

重要提示:使用保留字'type'!这就是表将保存类的类型的位置。运行迁移。

因此,对于子类,您可以这样做:

代码语言:javascript
运行
复制
rails g scaffold Men --parent=People

结果男人:

代码语言:javascript
运行
复制
class Men < People
end

女性也是如此:

代码语言:javascript
运行
复制
rails g scaffold Women --parent=People

结果

代码语言:javascript
运行
复制
class Women < People
end

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

希望它能帮上忙!

票数 4
EN

Stack Overflow用户

发布于 2013-04-07 00:46:38

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

也就是说,在脚手架上做这件事的真正目的是什么?一般来说,模型(a)很少是子类,(b)更少是相同的子类。

只需手动编辑即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15853334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档