如何在ruby中保存嵌套类?

时间:2012-08-27 05:58:47

标签: ruby-on-rails

我的ruby应用程序中有3个类。

   class EmployeeDetail < ActiveRecord::Base
         belongs_to :ContactDetails  
   end

   class ContactDetails < ActiveRecord::Base
      belongs_to :communicationAddress, :class_name=>'Address'
      belongs_to :permanentAddress, :class_name=>'Address'
   end

   class Address < ActiveRecord::Base
      attr_accessible :city, :country, :pin, :state, :street
   end

我的要求是为EmployeeDetail创建视图并从同一页面保存communicationAddress和permanentAddress。

任何人都可以告诉我什么应该是EmployeDetail的_form.html.erb的可能结构,以及我必须在控制器中进行哪些修改来保存地址。

thnks

1 个答案:

答案 0 :(得分:0)

您应该尝试nested attributesautosave association功能。

但首先,修复关联名称:ContactDetails可能会导致非常奇怪的错误,因为Ruby将以大写字母开头的所有单词计为常量。

首选方法是使用:contact_details和:communication_address样式,但是:contactDetails也应该起作用

此外,最好使用单数名称作为模型。

然后在你的EmployeeDetail模型中写:

accepts_nested_attributes_for :contact_details

它允许模型接受contact_details_attributes字段

中的contact_details属性

ContactDetails

accepts_nested_attributes_for :communication_address, :permanent_address

之后,您可以使用fields_for帮助程序创建表单,例如:

 <%= form_for :employee_detail do |employee_form| %>
    <%= employee_for.fields_for :contact_detail do |contact_fields| %>
       <%= contact_fields.fields.for :communication_address do |comm_address_fields| %>

您可能会看到一些示例:herehere以及许多其他示例,rails nested form