The h method you use in a Ruby on Rail View, isn't available in a model or in a controller.
That's very frustrating. An alternative method to use is:
CGI::escapeHTML( string_to_escape )
There are 39 posts tagged rails (this is page 6 of 8).
The h method you use in a Ruby on Rail View, isn't available in a model or in a controller.
That's very frustrating. An alternative method to use is:
CGI::escapeHTML( string_to_escape )
I'm storing an XML document into a database field. I'm having a lot of trouble loading and saving the same XML in the database.
Here's a script/console session:
>> xml = REXML::Document.new("") => ... > # strange response!! >> xml.to_s => " " # seems ok! >> xml.root.attributes['value'] = '<' >> xml.to_s => " " # fine by me, no problem... >> # now for the scary part ;-) >> xml2 = REXML::Document.new( xml.to_s ) >> xml2.to_s => " "
The HORROR!
ReXML seems to escape items very nicely when setting values.
But it doesn't unescape the values with REXML::Document.new( ... )..
Current Progress:
* I found a method REXML::Document.write( ) which seems to do the same..
Today (24-8-2007) I'm a bit further, It seems it works correctly with the text content of elements:
>> xml = REXML::Document.new("") => ... > # strange response!! >> xml.to_s => " " # seems ok! >> xml.root.attributes['value'] = '<' >> xml.root.text = '>' >> xml.to_s => " > " # fine by me, no problem... >> xml2 = REXML::Document.new( xml.to_s ) >> xml2.to_s => "> "
Update 2 (24-8-2007) I found my Windows Ruby on Rails REXML (1.8.4) installation is working perfectly. It seems a bug in the FreeBSD version which is REXML (1.8.6).
I'm trying to submit a bug report to the REXML authors, but the server keeps timing out :(
I found the solution, there's indeed a bug in REXML (1.8.6)
Change the code at line +/- 291 in text.rb: ( /usr/local/lib/ruby/1.8/rexml/text.rb )
#copy = copy.gsub( EREFERENCE, '&' ) copy = copy.gsub( "&", "&" )
To
copy = copy.gsub( EREFERENCE, '&' ) #copy = copy.gsub( "&", "&" )
Assume you have a params array with the following items:
params[:qry][:name] = 'jo' params[:qry][:city] = ''
You would like to build a new URL with the current params appended. Should be as simple as:
url_for( :action => 'list', :params => params.merge( { :sort => key, :page => nil } ) )
Well that's not the case it results in the following URL:
http://localhost/controller/list?qry=namejocity&sort=created_at
Long live Rails! The frustrating part of it, is that it first converts inner Hashmaps to a string. I don't have a clue why!
The solution, put the following code in your ApplicationHelper. (Is a nice method to have ;-)
# # Converts the given HASH array like 'params' to a flat # HASH array that's compatible with url_for and link_to # def flatten_param_hash( params ) found = true while found found = false new_hash = {} params.each do |key,value| if value.is_a?( Hash ) found = true value.each do |key2,value2| new_hash[ key.to_s + '[' + key2.to_s + ']' ] = value2 end else new_hash[ key.to_s ] = value end end params = new_hash end params end
Adjust your code to the following
url_for( :action => 'list', :params => flatten_param_hash( params.merge( { :sort => key, :page => nil } ) ) )
And voila the result is now a little bit better:
http://localhost/controller/list?qry[name]=jo&qry[city]=&sort=created_at
Yesterday I've encountered the irritating date problem in Rails. Please remember to restart Webrick when you change the date conversion constants or time conversion constants with the 'merge!' method:
ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!( :default => "%d-%m-%Y" )
On reload it merges the array again... You can never remove the ':default' date with a merge...
*sigh*
This tip can save you a whole lot of time, because reloading doesn't work
How nice of rails to make it easy to change the default date format that is used when
showing a date from the database.
ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!( :default => "%d-%m-%Y" )
Very easy. Simple writing:
model.date.to_s
outputs the date in my format.
All seems to work well, but a few days later. TODAY!! I found out my application wasn't saving dates anymore.
The cause:
Rails uses the ":default" date definition to format the date when it builds an SQL statement. Well my MySQL version doesn't seem to understand this date format.
For now I stay away from the :default date formatter.
I've changed my custom date_picker field so now it first formats the date with the date format before showing..
Btw. I found a possible solution and a remark that this has been solved for future rails version. You can find this info at, the rails date kit.