OSDN Git Service

fix bucket
[pettanr/pettanr.git] / lib / locmare / form / field.rb
index 5fa970b..e75f222 100644 (file)
@@ -5,11 +5,12 @@ module Locmare
   module FormModule
     class Field
       include FieldModule
-      attr :form, :field_name, :field_manifest, 
-        :label, :tag, :helpers, :options
-      def initialize form, field_name, field_manifest
+      attr :form, :field_name_with_sub_form, :field_manifest, 
+        :label, :tag, :helpers, :options, 
+        :field_name, :sub_form_names
+      def initialize form, field_name_with_sub_form, field_manifest
         @form = form
-        @field_name = field_name
+        @field_name_with_sub_form = field_name_with_sub_form
         @field_manifest = field_manifest
         @label = LabelFactory.factory self, @field_manifest.label
         @tag = TagFactory.factory self, @field_manifest.tag
@@ -18,6 +19,8 @@ module Locmare
           @helpers[helper_name] = HelperFactory.factory self, helper_manifest
         }
         @options = {'data-model' => @field_manifest.form_name}
+        @sub_form_names = @field_name_with_sub_form.split '.'
+        @field_name = @sub_form_names.pop
       end
       
       def mounted
@@ -29,7 +32,11 @@ module Locmare
       end
       
       def item
-        @form.item
+        i = @form.item
+        @sub_form_names.each do |n|
+          i = i.__send__(n)  # has_many associate model does not work
+        end
+        i
       end
       
       def value
@@ -40,8 +47,12 @@ module Locmare
         self.item.field_tag_attributes(@field_manifest.column_name, tag_options).merge(self.mount_option)
       end
       
+      def sub_form_name
+        @sub_form_names.map{|name| '[' + name + '_attributes' + ']'}.join
+      end
+      
       def form_field_name
-        @field_manifest.form_field_name
+        @form.form_name + self.sub_form_name + '[' + @field_name + ']'
       end
       
       def form_name