Hi,
I have the following migration file :
class Personne < ActiveRecord::Migration
def self.up
create_table( :personnes ) {
p>
p.string :prenom
p.string :nom
p.string :telephone
p.text :adresse
}
end
def self.down
drop_table :personnes
end
end
Hi,
I have the following migration file :
class Personne < ActiveRecord::Migration
def self.up
create_table( :personnes ) {
p>
p.string :prenom
p.string :nom
p.string :telephone
p.text :adresse
}
end
def self.down
drop_table :personnes
end
end
It's not stored anywhere. The rails convention is that the table name should be the plural lowercased, underscored form of the class name. Rails knows your class is called Personne, so it will assume the table is personnes.
Fred
But, this is dangerous because in French, the plural form is not constant ?
For sample a horse is called "cheval", the plural form is "chevaux" not "chevals". I doubt Rails support a dictionnary for knowing the good plural form. Is there way to change this behavior ?
Tx a lot !
But, this is dangerous because in French, the plural form is not constant ?
It's not constant in english either.
For sample a horse is called "cheval", the plural form is "chevaux" not "chevals". I doubt Rails support a dictionnary for knowing the good plural form. Is there way to change this behavior ?
Rails comes with a bunch of rules for how it should pluralize things
(see active_support/inflections.rb; http://github.com/rails/rails/tree/master/activesupport/lib/active_support/inflections.rb)
. These rules work for english, if you're doing everything in
another language you'll have to add your own inflection rules
Fred
Thank you, but can I override it ?, I don’t want to change the Rails code : I try inside my controller to override it, but I can’t, the problem is that the activesupport cannot be found ? require ‘activesupport/inflections’ class CarnetController < ApplicationController layout ‘carnet1’
**ActiveSupport::Inflector.inflections do |inflect|
inflect.plural( /$/, 's' )
inflect.plural( /s$/, 's' )
inflect.plural( /al$/, 'aux' )
end**
def voir
@personnes = Personne.find(:all)
end
end
Thank you, but can I override it ?, I don't want to change the Rails code :
Yes you can override this default behavior in your model class using:
set_table_name "my_table"
Example from ActiveRecord::Base documentation:
class Mouse < ActiveRecord::Base set_table_name "mice" ... ... end
Alexandre Brillant wrote:
Thank you, but can I override it ?, I don't want to change the Rails
code :I try inside my controller to override it, but I can't, the problem
is that the activesupport cannot be found ?
That's not the right place to do it. Depending on your version of
rails there's either an example at the bottom of environment.rb or in
config/initializers.
You'll probably want to clear out existing rules, which you can do
with clear
Fred
Thank you!, exactly what I need.