1

我有 create controllermodelview使用带有属性的脚手架:

org_name, org_description, webdomain, offc_addr, offc_ph

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

我不确认使用以下命令

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

因为我只想创建一个表并与其他对为该表创建视图不感兴趣的表创建关联,并且我正在使用嵌套表单

所以请告诉我这是否合适或者我做其他事情......在此先感谢。!

4

4 回答 4

2

在开始我在下面给出的任何内容之前,您必须删除之前创建的任何表或控制器并将其作为新的开始,并按照下面给出的说明进行操作以避免任何异常或重复。

所以首先你需要为组织生成一个脚手架,为电话号码和地址生成一个简单的模型(这将生成它的迁移以及添加表)。现在只为组织生成脚手架的原因是因为您不需要电话号码或地址的表单(视图)。但是您会将地址与某个组织相关联,将 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 地址,使用地址对象生成 fields_for phone_numbers。为了您的帮助,您可以从下面的链接中阅读 nested_attributes 行为:

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

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

于 2013-08-16T08:34:38.107 回答
0

使用

rails generate migration

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

于 2013-08-16T06:41:08.010 回答
0

你需要一个模型:

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

这将address.rb在模型文件夹和数据库迁移中生成一个。

然后迁移数据库:

rails db:migrate

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

然后,您需要研究belongs_tohas_many,以便在您的代码中将它们联系在一起。

于 2013-08-16T06:42:27.757 回答
0

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

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

第二个表是地址。 offc_addr, org_id

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

然后改变模型。组织 has_many offc_addr 和 offc_addr has_many offc_phone

于 2013-08-16T06:48:09.990 回答