2010-12-12 7 views
7

Come si ActiveRecord deducono mappatura da singolare (classe) e plurale (tabella), ad esempio:In che modo ActiveRecord deduce il mapping da singolare (classe) e plurale (tabella); ed è possibile scavalcare?

People = Person 
Ducks = Duck 
Geese = Goose 
Categories = Category 

Sembra una bella idea nel concetto, ma idea se devo mappare il singolare (classe) e plurale istanze (tabella), o se ActiveRecord è un po 'come "magicamente" facendo questo. Inoltre, sembra che questo potrebbe comportare un ulteriore overhead quando si deve pluralizzare un nome che non è semplice come aggiungere semplicemente "s".

NOTA: spostato la seconda parte di questa domanda qui: Does ActiveRecord assign a key to every table using the naming convention “ID”, and if so, why?

+1

Queste sono domande abbastanza fondamentali da chiedere. C'è molto da sapere su ActiveRecord, ed è difficile fare le cose correttamente senza aver letto le basi. In bocca al lupo. – aceofspades

+1

@fullware: Non sono domande fondamentali, infatti: non sono a conoscenza di nessun altro sistema che pluralizzi dinamicamente gli oggetti nel tentativo di raggiungere una sorta di coesione semantica; L'inglese stesso non pluralizza le cose in modo coerente. Infatti, se non riesco a trovare una buona ragione per non farlo, toglierò la "funzionalità" impostando mai class/table come "inflect.uncountable"; dal momento che è così, molto più facile di pensare a una regola extra che non è basata su una lingua inglese altamente incoerente. – blunders

+1

Fondamentale per Rails era l'implicazione qui. Potresti sollecitare qualche altra opinione sul fatto che le funzioni di disattivazione che fanno parte del "Rails Way" siano ben accolte dagli altri sviluppatori con cui potresti dover lavorare. Nessuno è soddisfatto al 100% del modo in cui le cose sono fatte, ma personalmente finisco per pentirmi quando cerco di combattere un quadro piuttosto che lavorare con esso. – aceofspades

risposta

10

Rails usa l'ActiveSupport :: inflettore per tenere traccia delle parole e come cambiarle. Ad esempio, Rails saprà di memorizzare UserPreference in user_preferences

È inoltre possibile aggiungere le proprie flessioni al dispositivo di gonfiaggio per gestire casi più strani in cui l'aggiunta di una s non ha senso.

In /config/initializers/inflections.rb si ottiene il seguente:

ActiveSupport::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 

http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html

+0

+1 Grande, grazie - ha fatto la domanda solo una domanda e selezionandola come risposta. Sposta l'altra domanda qui: http://stackoverflow.com/questions/4422042/does-activerecord-assign-a-key-to-every-table-using-the-naming-convention-id-a – blunders

Problemi correlati