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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top