Error: private method `gsub!' called for

A ver si alguien me puede ayudar porque no encuentro la manera de
solucionarlo.
Estoy trabajando con una aplicación que utiliza el plugin Globalize.
Tengo una tabla de páginas y una de menús donde hay un permalink que se
genera con la libreria siguiente

def self.use_permalink( attr )
self.class_eval <<-EOF, FILE, LINE
before_save { |r| r.permalink = r.#{attr}.to_url }
EOF
end
end

class String
def to_url
# paso a minusculas y quito caracteres no validos y espacios
result = self.downcase
result.gsub!(/[’"]/, ‘’)
result.gsub!(/W/, ’ ')
result.gsub!(/ +/, ‘-’)
result.gsub!(/(-)$/, ‘’)
result.gsub!(/^(-)/, ‘’)
# devuelvo el resultado
result
end
En la tabla de menús guardo el permalink i el page_id. Cuando alguien va
a alguna opción del menú, la busco con el permalink y luego busco la
página con el page_id (espero explicarme bien)

Cuando quiero acceder a una página en concreto utilizo el siguiente
método:

def section
@menu = Menu.find_by_permalink(params[:id])
@page = Page.find(:first, :conditions =>[‘id = ?’, @menu.page_id])
render :action => ‘page’
end

Si cargo la págin con el idioma por defecto no hay ningún problema, si
la cargo en cualquier otro idioma aparece el siguiente error:

private method `gsub!’ called for {“permalink”=>“homepage”}:Hash

#{RAILS_ROOT}/vendor/plugins/globalize/lib/globalize/localization/db_translate.rb:480:in
fix_conditions' #{RAILS_ROOT}/vendor/plugins/globalize/lib/globalize/localization/db_translate.rb:479:ineach’
#{RAILS_ROOT}/vendor/plugins/globalize/lib/globalize/localization/db_translate.rb:479:in
fix_conditions' #{RAILS_ROOT}/vendor/plugins/globalize_extension/lib/globalize/db_translate_ex.rb:44:infind_every’
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/base.rb:991:in
find_initial' /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/base.rb:1205:insend’
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/base.rb:1205:in
method_missing' /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/base.rb:1205:insilence’
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/base.rb:1205:in
method_missing' #{RAILS_ROOT}/app/controllers/index_controller.rb:8:insection’

Alguna idea??

He descubierto que si cambio la linea
@menu = Menu.find_by_permalink(params[:id])
por
@menu = Menu.find(:first, :conditions => [“permalink = ?”,
params[:id]])
funciona bien, así que el error está en el find_by_permalink

Le ha pasado a alguien antes?

def section
@menu = Menu.find_by_permalink(params[:id])
@page = Page.find(:first, :conditions =>[‘id = ?’, @menu.page_id])
render :action => ‘page’
end

On Mar 30, 2007, at 6:59 PM, Emili Parreño wrote:

He descubierto que si cambio la linea
@menu = Menu.find_by_permalink(params[:id])
por
@menu = Menu.find(:first, :conditions => [“permalink = ?”,
params[:id]])
funciona bien, así que el error está en el find_by_permalink

Es sospechoso porque ambas llamadas son equivalentes, con casi toda
seguridad que hay algo mas, se liaron las pruebas…

– fxn

On Mar 30, 2007, at 6:46 PM, Emili Parreño wrote:

def section
@menu = Menu.find_by_permalink(params[:id])
@page = Page.find(:first, :conditions =>[‘id = ?’, @menu.page_id])

Si tienes el belongs_to :page configurado en la clase Menu llegar a
la pagina asociada es mas sencillo, tan solo has de hacer:

@page = @menu.page

En general se usan poco IDs explicitos al trabajar con AR.

– fxn