Ruby on Rails中的复合实体脚手架

时间:2012-10-29 04:09:33

标签: ruby-on-rails scaffolding

我是Ruby on Rails的新手。到目前为止,我只使用脚手架创建了CRUD操作。现在,我需要使用脚手架将两个实体集成到单个表单中,而不是通过硬编码。

我们如何使用脚本将两个实体组合在一起?

我有两个实体,Student_address和Student_phnumber。我想将这两个实体构建成一个单独的表单,我可以在其中进行CRUD操作,我想通过脚手架实现这一点。

Student_address是由Hse_name,Street_name等组成的实体。 Student_phnumber另一个由ph_number,type等组成的实体

我想将这两个实体组合在一起。

3 个答案:

答案 0 :(得分:6)

Scaffolding只不过是为generator设置模型完整的基本资源。除了脚手架之外,还有许多其他生成器,默认情况下随Rails一起提供。它们都没有设置为为一组相关模型生成资源。我怀疑其中很大一部分原因是由于表达这种关系的方法种类繁多,因此创建通用UI几乎是不可能的。此外,脚手架更多的设置可以让您快速启动和运行,并打算根据您的需要进行修改。这些修改通常适用于任何非平凡的应用程序。有很多第三方生成器,包括流行的nifty generators,但是根据我的知识,没有一个可以创建你想要生成的代码。如果这是您需要经常设置的关系,您可以考虑创建自己的生成器来处理任务 - 实际上非常简单。一个好方法是实现你的理想情况,然后用它创建一个生成器。

修改

此外,您可能希望调整变量/属性名称。它们应该是小写的并且是强调的,因此Street_name将变为street_name。任意缩写也使得编码/维护非常困难,因此Student_phnumber将更好地表达为student_phone_number。除了一致性(例如ph_number vs Student_phnumber)之外,这样做的原因是Rails实际上使用了internal methods like these中的大小和间距。

答案 1 :(得分:2)

让我看看我是否了解你。

您描述的模型/实体关系是:

student
   address
    - house_name
    - street_name
    - etc
   phone_number
    - number
    - area_code
    - etc

你想要:

a)自动生成模型

b)自动生成一个控制器/视图,其中包含用于创建学生的表单,包括用于设置地址和电话号码的字段

好。 b)不能通过Rails脚手架完成。但是,您可以使用ActiveSupport gem(docs here)来实现此目的。这是你做的:

gem install active_scaffold
rails g active_scaffold Student name:string
rails g active_scaffold PhoneNumber area_code:integer number:integer student_id:integer
rails g active_scaffold Address first_line:string second_line:string student_id:integer

您必须在此处进行的唯一手动工作是弹出模型并添加关系:

Address
 belongs_to :student
PhoneNumber
 belongs_to :student
Student
 has_one :address
 has_one :phone_number

ActiveScaffold将为您执行自动生成这样的视图:

enter image description here

填写该表格,您的模型将全部保存并链接在一起!

答案 2 :(得分:0)

这是你在找什么?

rails generate scaffold Student student_address:string student_phnumber:string