Rails 3 Eredited_Resources ignora l'impostazione delle "impostazioni predefinite"
-
28-10-2019 - |
Domanda
Sto usando risorse ereditarie per i miei controller. E ora ho il modello:
class Sms < ActiveRecord::Base
end
E voglio il controller per questo, dove faccio le valori predefiniti:
class Admin::SmsesController < Admin::InheritedResources
defaults :resource_class => Sms,
:collection_name => 'smses',
:instance_name => 'sms'
end
Ma non riesco a capire, perché sta ancora cercando di ottenere il modello "SMSE":
NameError in Admin::SmsesController#index
uninitialized constant Smse
Pls aiuto.
Soluzione
Il problema è che Rails non sa che il plurale di SMS è SMS. Se vai alla console Rails dovresti vederlo:
> "Sms".pluralize
=> "Sms"
> "Smses".singularize
=> "Smse"
Di fronte a un plurale, non riconosce, Singularizza semplicemente tronca le "S" finali, motivo per cui la tua app è alla ricerca di un modello SMSE inesistente.
Ti risparmierai molti mal di testa configurando le rotaie per pluralizzare/singolarizzare correttamente i tuoi modelli. Nel file config inizializzatori inflections.rb è necessario trovare alcuni esempi su come farlo. Quello che vuoi è:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'sms', 'smses'
end
Quindi non penso che dovresti dover mettere l'opzione predefinita lì dentro - dovrebbe funzionare tutto fuori dalla scatola.