From: David Trasbo Date: 2008-10-16T22:48:42+09:00 Subject: Re: A Ruby block question David Trasbo wrote: Actually I think I'm close to a solution now. I made these two methods: def fields_for_setting(namespace, name) id = "settings_#{namespace}_#{name}_" m = Builder::XmlMarkup.new :indent => 2 fields_for "settings[]", setting = Setting.find_or_initialize_by_namespace_and_name(namespace, name) do |f| m.p do unless setting.new_record? m << (f.hidden_field :id, :index => nil, :id => id+"id") end m << (f.hidden_field :namespace, :index => nil, :id => id+"namespace") m << (f.hidden_field :name, :index => nil, :id => id+"name") m << yield(f) end end end def text_field_for_setting(namespace, name, label=nil) namespace = namespace.to_s name = name.to_s label ||= "#{namespace.capitalize} #{name}" id = "settings_#{namespace}_#{name}_" fields_for_setting(namespace, name) do |f| f.label :value, label, :index => nil, :for => id+"value" f.text_field :value, :index => nil, :id => id+"value" end end In my view I'm calling the second method (text_field_for_setting) like this: = text_field_for_setting(:site, :owner) The method that is called here then calls my first method (fields_for_setting) with a block. This actually works fine, but for some reason that I can't figure out (I hope you can help me) It only the LAST line of the block that is passed to fields_for_setting that shows up. In other words, even though I declare both a label and a text field, only the text field shows up. How comes? -- Posted via http://www.ruby-forum.com/.