6

我是 Rails 的新手,我的脚还是湿的,所以如果这是微不足道的或“错误的方式”做事,请原谅我。

我想为一些脚手架模型创建一个超类。例如,我想为Men和 for创建一个脚手架Women,但我希望它们都继承自People超类;Men并且会从类Women继承像height和类的字段。weightPeople

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

4

4 回答 4

4

通常我会做类似的事情:

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。

希望能帮助到你!

于 2017-06-20T03:04:17.700 回答
3

这是我考虑过用我的应用程序做的事情。我还没有这样做,如果您是 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和模型WomenUser

# 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关键字的信息。如果您运行继承的设置,您最终会想要使用这些。

于 2013-04-06T16:41:11.430 回答
0

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

也就是说,在脚手架中执行此操作的真正目标是什么?一般来说,模型将 (a) 很少是子类,并且 (b) 更罕见的是同一个子类。

只需手动编辑它们。

于 2013-04-06T16:46:37.600 回答
0

观看有关单表继承的截屏视频。

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


单表继承以及在 Rails 中的使用位置

于 2013-04-06T18:13:57.717 回答