Hi,
Is there a way when using scaffolding to name a primary key like
tablename_id instead of the default id?
Thanks,
Kostas
Hi,
Is there a way when using scaffolding to name a primary key like
tablename_id instead of the default id?
Thanks,
Kostas
You could do this:
script/generate scaffold player player_id:primary_key name:string
which generates a migration like this
class CreatePlayers < ActiveRecord::Migration
def self.up
create_table :players do |t|
t.primary_key :player_id
t.string :name
t.timestamps
end
end
def self.down
drop_table :players
end
end
Regards,
Craig
Thanks for the answer. I run:
script/generate scaffold reservation reservation_id:primary_key
name:string
followed by
rake db:migrate
and I get the following error:
– create_table(:reservations)
rake aborted!
Mysql::Error: Incorrect table definition; there can be only one auto
column and it must be defined as a key: CREATE TABLE reservations
(id
int(11) DEFAULT NULL auto_increment PRIMARY KEY,
reservation_id
int(11) DEFAULT NULL auto_increment PRIMARY KEY,
reservation_name
varchar(255) DEFAULT NULL NULL, created_at
datetime DEFAULT NULL NULL, updated_at
datetime DEFAULT NULL NULL)
ENGINE=InnoDB
Apparently it tries to create two primary keys and fails.
Kostas
On Aug 30, 9:31 pm, “Craig D.” [email protected]
On 30 Aug 2008, at 22:23, samson78 wrote:
Thanks for the answer. I run:
script/generate scaffold reservation reservation_id:primary_key
name:string
you need create_table :players, :id => false do |t| …
so that rails doesn’t try to create its primary key as well as your own.
Fred
Thanks for the answer.
I did that and the migration completed fine.
Bit when I am trying to view the site it doesn’t show the edit, show,
destroy links, but only the “new” one. And the Create new doesn’t
work.
Kostas
On Aug 30, 10:33 pm, Frederick C. [email protected]
On 30 Aug 2008, at 23:01, samson78 wrote:
Thanks for the answer.
I did that and the migration completed fine.
Bit when I am trying to view the site it doesn’t show the edit, show,
destroy links, but only the “new” one. And the Create new doesn’t
work.
have you got set_primary_key in your model ?
Fred
The whole thing seems that has a problem with:
1)The params:id in the controller
do I leave it as :id or do I write the new primary key,
e.g. :reseravations_id
2)in the routes.rb
map.connect ‘:controller/:action/:id’
map.connect ‘:controller/:action/:id.:format’
It cannot get route as it searches for :id
Kostas
On Aug 30, 10:33 pm, Frederick C. [email protected]
Yes, the primary key is set when I use reservation_id:primary key when
calling the generate script
After db:migrate it shows as primary key on the database.
Kostas
On Aug 30, 11:38 pm, Frederick C. [email protected]
On 30 Aug 2008, at 23:15, samson78 wrote:
The whole thing seems that has a problem with:
1)The params:id in the controller
do I leave it as :id or do I write the new primary key,
e.g. :reseravations_id
should be able to leave it as :id - the primary key is always
available as id (ie the id method always exists and will return the
correct value)
Fred
2)in the routes.rb
map.connect ‘:controller/:action/:id’
map.connect ‘:controller/:action/:id.:format’It cannot get route as it searches for :id
Well, you see this problem remains even when I use generate model and
then manually fill the migration with
t.primary_key:tablename_id
It tries to create a separate id.
And if I use :id =>false, so it creates only the tablename_id, I have
the same problems as I mentioned above.
Kostas
Out of sheer curiosity, what’s the compelling reason to ditch Rails’
convention and change the primary key if you’re still using
scaffolding?
RSL
I meant, what’s the compelling reason to not go with Rails’ defaults
and use the :id field? If you’re not using a legacy database and all.
Most people who need/want to change the primary key are doing so
because they are having to support a legacy db with columns already
created. You seem to be creating this database for the first time and
it’s usually a good idea to go with Rails’ defaults then, unless
there’s a compelling reason not to. Which is what I was asking.
RSL
Oh right,
I am cerating the database for the first time, but I am trying to
imitate an existing database (for testing purposes).
Because the old app works with the existing database and unfortunately
parts of the old app will continue to exist for some time alongside
the new components that will be done with RoR.Messy, I know, but not
my decision!!
Thanks,
Kostas
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs