创建具有关联的新表

时间:2013-08-16 06:34:04

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2

我使用带有属性的scaffold创建了controllermodelview

org_name, org_description, webdomain, offc_addr, offc_ph

我的问题是我想针对单个组织创建多个地址,针对单个地址创建多个电话号码

我不确认使用以下命令

rails generate migration NAME [field:type field:type] [options]

因为我只是想创建一个表格并与其他表格建立关联,而这些表格对于为该表格创建查看并且我正在使用嵌套表单不感兴趣。

所以请告诉我这是否合适或我做了别的事......在此先感谢。!

4 个答案:

答案 0 :(得分:2)

在开始我在下面给出的任何内容之前,您必须删除之前创建的任何表格或控制器并以新的方式启动它,并按照下面给出的说明操作,以避免任何例外或重复。

首先,您需要为组织生成一个脚手架,并为PhoneNumbers和Addresses创建一个简单的模型(这将生成其迁移以及添加表)。现在只为Organiztaions生成脚手架的原因是因为您不需要PhoneNumbers或Addresses的表单(视图)。但是你会将某些组织和phone_numbers的地址与某个地址相关联,以便稍后通过代码处理,我会解释你要保持简单并确保其正常工作。首先,您需要运行以下命令:

rails generate scaffold organizations org_name:string org_description:text webdomain:string

rails generate model address offc_addr:text organization_id:integer

rails generate model phone_number offc_ph:string address_id:integer

现在,这将生成您所需的一切。接下来,您需要运行以下命令在数据库中添加表。

rake db:migrate 

完成后,您需要调整模型,如下所述:

#FOR ORGANIZATIONS
class Organization < ActiveRecord::Base
  attr_accessible :org_description, :org_name, :webdomain
  has_many :addresses

  #THIS IS TO MAKE IT EASIER TO MANAGE IT IN VIEWS (read about nested attributes if you do not know)
  accepts_nested_attributes_for :addresses

end

#FOR ADDRESS
class Address < ActiveRecord::Base
  attr_accessible :offc_addr, :organization_id
  belongs_to :organization
  has_many :phone_numbers

  #THIS IS TO MAKE IT EASIER TO MANAGE IT IN VIEWS (read about nested attributes if you do not know)
  accepts_nested_attributes_for :phone_numbers

end

#FOR PHONE NUMBER
class PhoneNumber < ActiveRecord::Base
  attr_accessible :address_id, :offc_ph
  belongs_to :address
end

这就是你要做的所有事情。现在,只需使用视图中的地址对象,使用组织对象和fields_for phone_numbers生成fields_for地址。为了您的帮助,您可以从以下链接中读取nested_attributes行为:

http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for

我希望这会帮助你瓦斯并为你清理事情。干杯:)

答案 1 :(得分:0)

使用

rails generate migration

只会创建一个迁移文件,没有视图或控制器。这是向数据库模式添加新表或新字段的好方法。

答案 2 :(得分:0)

你需要一个模型:

rails generate model address organization_id:integer, street:string zip:string city:string //etc

这将在models文件夹中生成address.rb并进行数据库迁移。

然后迁移数据库:

rails db:migrate

并且您将在数据库中拥有该表。

然后,您需要查看belongs_tohas_many等,以便将它们绑定在您的代码中。

答案 3 :(得分:0)

我认为你可以为它创建三个表,组织,地址和电话。 然后与他们建立关系。

第一个表是您创建的表,删除地址和电话线。 org_name,org_description,webdomain

第二张表是地址。 offc_addr,org_id

第三张表是电话地址。 offc_phone,org_phone_id

然后更改模型。 Org has_many offc_addr和offc_addr has_many offc_phone