I subscribed to this mailint list this morning after days looking for
the way to do it, so this is my first post.
My name is Miquel and I have been coding with ruby for a year and a
half (using Qtruby bindings) and now I'm a rails newbie (I'm with it
since a month ago). Now I'm coding an app and I'm trying to create
(using migrations) a table which has a column named 'id' which is
primary key but it's not auto_increment. The primary key db schema of
this part is:
class CreateManyTable < ActiveRecord::Migration
def self.up
create_table :first_tables do |t|
t.column :any_column, :string
end
create_table :second_tables do |t|
t.column :any_column, :string
end
create_table :third_tables do |t|
t.column :any_column, :string
end
end
def self.down
drop_table :first_tables
drop_table :second_tables
drop_table :third_tables
end
end
Maybe I didn't make myself clear (english problem maybe). The thing is
that I want that the first table's (first_tables) id column is
auto_increment and not the second and the third one (second_tables and
third_tables).
If this migration example the three tables will have a column named
'id' which is integer, primary_key and auto_increment.
Why would you want the ID column not to be auto_increment?
On Rails you don't necessarily code towards specific values on
columns, you code towards objects and their properties.
And the table names you mentioned: users, registered_users,
non_registered_users suggest that you should have one user model with
a column registered, type boolean (instead of three different models).
Then, if you want to find all objects from that model which have the
property registered as false, you do something like:
@users = Users.find(:all, :registered => true)
And note that I don't use tables and columns to refer to data, I use
models and properties. You should code in Rails from that
perspective.
Maybe I didn't make myself clear (english problem maybe). The thing is
that I want that the first table's (first_tables) id column is
auto_increment and not the second and the third one (second_tables and
third_tables).
If this migration example the three tables will have a column named
'id' which is integer, primary_key and auto_increment.
You can pass :id => false to create_table to stop it creating the id
column for you (you can then create it yourself with whatever options
you want)
Sometimes user's stored data is different if a user is registered or
not (maybe a registered user has email, login, password, etc and the
non_registered user only has the email). In this case you have two
options.
The first one is add all the column in an only table inserting null
values depending if its a non registered user, but I don't like this
way. The other option is a table called users and two tables, which has
a relation 1:1 with the previous one called registered and
non_registered. The tables users has the common data which have
registered and non_registered and the different data is stored in the
other two tables.
The column 'id' is common to the three tables but in table users is
autonumeric and in the other two is not (because the id value is set
by the first one and share with the others).