[Nitro] Hash and field name

Emmanuel Piperakis epiperak at softlab.ece.ntua.gr
Wed Sep 21 03:45:02 EDT 2005


On Wed, 21 Sep 2005, Emmanuel Piperakis wrote:

>> <input name="testobj[key1]" ... />
>> <input name="testobj[key2]" ... />
> Sorry , I checked this and it did not work with fill. :-(
> No worries though...
>
In order for hash to work:
1) In the model it has to be initialized (use symbols here , :en, :jp)
class Bgroup
   property   :title,    Hash
   def initialize
     @title = Hash.new
     @title[:en] = @title[:jp] = nil
   end
end

2) in the template use " and not ' for the name definition, and not 
symbols, just plain strings (populate @bgroup for edit case)
<input id="bgroup_title[en]" name="title[en]" value=@bgroup.title[:en] />
<input id="bgroup_title[jp]" name="title[jp]" value=@bgroup.title[:jp] />
(the name="title[en]" is returned as "title" => {"en" => "inputed value", 
"jp" => "inputed other value" }   )

3) in the controller manually assign the values. fill function does not 
work correctly with Hash, that is also why Date is not stored with fill
(I guess...)
def bgroup_save(meth = 'new')
   if request.post?
     if meth == 'new'
       bgroup = Bgroup.new
     elsif meth == 'update'
       oid = request['oid']
       bgroup = Bgroup[oid]
     end
#    request.fill(bgroup)
     bgroup.title[:en] = request['title']['en']
     bgroup.title[:jp] = request['title']['jp']
     bgroup.creation = Date.new(request['creation']['year'].to_i,
                                request['creation']['month'].to_i-1,
                                request['creation']['day'].to_i,
                                Date::ITALY)
     bgroup.save
   end
   expire_output 'bgroups'
   redirect_to_referer
end

Sorry for the NOT ELEGANT solution, but until fill is updated to handle 
Hash better this will do.. ;-)

Emmanouil Piperakis (epiperak at cs.ntua.gr)
{To explore is Human, to Create is Devine,
  To teach is Primal, to Rule is Sin}



More information about the Nitro-general mailing list