Ruby Forum Italian Ruby user group > [rails 2] pluralizzazione

Posted by Luca Reghellin (stratboy)
on 25.03.2008 15:48
Ciao! Ho un problema di pluralizzazione. Vorrei creare una tabella
'concerti', solo che creando il modello 'Concerto', rails mi fa una
tabella 'concertos'.
Tra l'altro poi ho bisogno che la cosa venga rispettata anche nelle
routes (REST).

Ho provato a scrivere così in config/environment.rb:

Inflector.inflections do |inflect|
  inflect.irregular 'concerto','concerti'
end

ActionController::Routing::Routes.reload!


subito prima di:

Rails::Initializer.run do |config|
  # Settings in config/environments/* take precedence over those
specified here.
  # Application configuration should go into files in
config/initializers

Ecc...

Ma quando cerco di creare un modello, il terminale dice questo:

/config/environment.rb:13: uninitialized constant Inflector (NameError)
        from
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
        from
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require'
        from
/opt/local/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/generate.rb:1
        from
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
        from
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require'
        from script/generate:3

Qualche idea? :(
Posted by Stefano Cobianchi (Guest)
on 25.03.2008 15:55
(Received via mailing list)
On Mar 25, 2008, at 3:48 PM, Luca Reghellin wrote:
>
> Ciao! Ho un problema di pluralizzazione. Vorrei creare una tabella
> 'concerti', solo che creando il modello 'Concerto', rails mi fa una
> tabella 'concertos'.
> Tra l'altro poi ho bisogno che la cosa venga rispettata anche nelle
> routes (REST).

Domanda forse stupida: perche' vuoi per forza usare una parola italiana?

S.
Posted by Luca Reghellin (stratboy)
on 25.03.2008 16:28
No Stefano, la tua è una domanda plausibile. In effetti non ho al 
momento reali obblighi in merito. Suppongo che se volessi che il 
navigatore potesse vedere es. la lista concerti digitando /concerti 
anziché /shows, pur mantenendo Show come nome del modello, basterebbe 
sistemare opportunamente le routes, dunque puoi considerarlo un 
'capriccio'.

Ciò nonostante, essendo che sto imparando, voglio capire come si può 
risolvere un problema del genere, che potenzialmente potrebbe saltar 
fuori in futuro con altri progetti.
Se una cosa così non si può sistemare in velocità, obiettivamente è un 
grosso limite di Rails.





Stefano Cobianchi wrote:
> On Mar 25, 2008, at 3:48 PM, Luca Reghellin wrote:
>>
>> Ciao! Ho un problema di pluralizzazione. Vorrei creare una tabella
>> 'concerti', solo che creando il modello 'Concerto', rails mi fa una
>> tabella 'concertos'.
>> Tra l'altro poi ho bisogno che la cosa venga rispettata anche nelle
>> routes (REST).
> 
> Domanda forse stupida: perche' vuoi per forza usare una parola italiana?
> 
> S.
Posted by Stefano Cobianchi (Guest)
on 25.03.2008 16:45
(Received via mailing list)
On Mar 25, 2008, at 4:28 PM, Luca Reghellin wrote:
>
> No Stefano, la tua è una domanda plausibile. In effetti non ho al
> momento reali obblighi in merito. Suppongo che se volessi che il
> navigatore potesse vedere es. la lista concerti digitando /concerti
> anziché /shows, pur mantenendo Show come nome del modello, basterebbe
> sistemare opportunamente le routes, dunque puoi considerarlo un
> 'capriccio'.


Capisco.
Comunque la soluzione e' di mettere le regole custom di
pluralizzazione DOPO
il blocco di inizializzazione, oppure fare come consiglia il commento:
"Application configuration should go into files in config/initializers"

Infatti se guardi in quella directory troverai un file
"inflections.rb" con un esempio
commentato.

S.
Posted by Raffaele Tesi (kira)
on 25.03.2008 16:51
nella struttura (directories) del progetto rails, vai su 
config/initializers e apri il file inflections.rb (su rails 2, se su 1.x 
apri il file environment.rb sotto \config\).
Trovi le regole di "pluralizzazione", queste sono quelle di default.

# Inflector.inflections do |inflect|
#   inflect.plural /^(ox)$/i, '\1en'
#   inflect.singular /^(ox)en/i, '\1'
#   inflect.irregular 'person', 'people'
#   inflect.uncountable %w( fish sheep )
# end


 e puoi crearne di nuove, tramite regex. Questa è la lista delle mie 
regole (adatte alla lingua italiana), sufficienti per i casi più comuni

Inflector.inflections do |inflect|
  inflect.plural /(.*)a$/i, '\1e'
  inflect.plural /(.*)e$/i, '\1i'
  inflect.plural /(.*)o$/i, '\1i'
  inflect.plural /(.*)io$/i, '\1i'
end

Ne approfitto per chiedere all'intera comunità italiana di contribuire 
alla creazione di un file di regole di pluralizzazione migliore 
possibile (proposta per il wiki)

Raffaele Tesi
Posted by Luca Reghellin (stratboy)
on 25.03.2008 16:59
Grazie mille ad entrambi! :)
Posted by Marco Mastrodonato (marcomd)
on 17.04.2008 15:52
Raffaele Tesi wrote:
> 
>  e puoi crearne di nuove, tramite regex. Questa è la lista delle mie 
> regole (adatte alla lingua italiana), sufficienti per i casi più comuni
> 
> Inflector.inflections do |inflect|
>   inflect.plural /(.*)a$/i, '\1e'
>   inflect.plural /(.*)e$/i, '\1i'
>   inflect.plural /(.*)o$/i, '\1i'
>   inflect.plural /(.*)io$/i, '\1i'
> end

A me queste non funzionano, se uso .irregular invece si, come mai? (Uso 
rails 2) Forse non è corretta la punteggiatura?

Altra domanda: serve fare la reload o serviva solo per rails 1?
ActionController::Routing::Routes.reload!
Posted by Raffaele Tesi (kira)
on 18.04.2008 10:27
hai commentato le regole di default?



Marco Mastrodonato wrote:
> Raffaele Tesi wrote:
>> 
>>  e puoi crearne di nuove, tramite regex. Questa è la lista delle mie 
>> regole (adatte alla lingua italiana), sufficienti per i casi più comuni
>> 
>> Inflector.inflections do |inflect|
>>   inflect.plural /(.*)a$/i, '\1e'
>>   inflect.plural /(.*)e$/i, '\1i'
>>   inflect.plural /(.*)o$/i, '\1i'
>>   inflect.plural /(.*)io$/i, '\1i'
>> end
> 
> A me queste non funzionano, se uso .irregular invece si, come mai? (Uso 
> rails 2) Forse non è corretta la punteggiatura?
> 
> Altra domanda: serve fare la reload o serviva solo per rails 1?
> ActionController::Routing::Routes.reload!
Posted by Marco Mastrodonato (marcomd)
on 24.04.2008 10:46
Raffaele Tesi wrote:
> hai commentato le regole di default?

Se intendi quelle del file inflections.rb non le ho commentate, lo erano 
già di default