Steve Odom
2006-Apr-02 02:17 UTC
[Rails] adding primary_key to join table using migrations
Hi list,
My tag_question_user join table is not currently a full-blown model. It
doesn''t have a primary key - just tag_id, question_id, and user_id.
I now want to add a primary key to this model (because I want to add a
"description" column as well so users can describe the tag.
I''m not sure how to add this using migrations.
Here is what I have:
class AddNotesToTags < ActiveRecord::Migration
def self.up
add_column :tags_questions_users, "id", :primary_key
add_column :tags_questions_users, "description", :string, :limit
=>
80, :null => false
end
def self.down
remove_column :tags_questions_users, "id"
remove_column :tags_questions_users, "description"
end
end
That''s giving me this error:
Mysql::Error: #42000You have an error in your SQL syntax; check the manual
that
corresponds to your MySQL server version for the right syntax to use near
''''
at
line 1: ALTER TABLE tags_questions_users ADD id
Any suggestions?
Thanks,
Steve
http://www.smarkets.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
http://wrath.rubyonrails.org/pipermail/rails/attachments/20060402/09f6bb16/attachment.html
Sam Joseph
2006-Jul-06 17:50 UTC
[Rails] adding primary_key to join table using migrations
Hi Steve, Did you ever find a solution to this? We''re having the same problem. As far as I can see the mysql adapter isn''t set up to handle the :primary_key type. I found a patch for Postgre: http://dev.rubyonrails.org/ticket/3735 Looks like this might be fixed in 1.2 CHEERS> SAM Steve Odom wrote:> Hi list, > > My tag_question_user join table is not currently a full-blown model. > It doesn''t have a primary key - just tag_id, question_id, and user_id. > > I now want to add a primary key to this model (because I want to add a > "description" column as well so users can describe the tag. > > I''m not sure how to add this using migrations. > > Here is what I have: > class AddNotesToTags < ActiveRecord::Migration > def self.up > add_column :tags_questions_users, "id", :primary_key > add_column :tags_questions_users, "description", :string, :limit > => 80, :null => false > end > > def self.down > remove_column :tags_questions_users, "id" > remove_column :tags_questions_users, "description" > end > end > > That''s giving me this error: > > Mysql::Error: #42000You have an error in your SQL syntax; check the > manual that > corresponds to your MySQL server version for the right syntax to use > near '''' at > line 1: ALTER TABLE tags_questions_users ADD id > > Any suggestions? > > Thanks, > > Steve > http://www.smarkets.net > >------------------------------------------------------------------------ > >_______________________________________________ >Rails mailing list >Rails@lists.rubyonrails.org >http://lists.rubyonrails.org/mailman/listinfo/rails > >
Sam Joseph
2006-Jul-06 18:13 UTC
[Rails] adding primary_key to join table using migrations
I''m also looking for some way to drop a primary key, but my first
attempt:
remove_index :workspaces_discussions, :primary_key
has failed miserably:
Mysql::Error: Can''t DROP
''workspaces_discussions_primary_key_index'';
check that
column/key exists: DROP INDEX workspaces_discussions_primary_key_index
ON worksp
aces_discussions
Many thanks for any suggestions.
CHEERS> SAM
Sam Joseph wrote:
> Hi Steve,
>
> Did you ever find a solution to this? We''re having the same
problem.
> As far as I can see the mysql adapter isn''t set up to handle the
> :primary_key type.
>
> I found a patch for Postgre:
>
> http://dev.rubyonrails.org/ticket/3735
>
> Looks like this might be fixed in 1.2
>
> CHEERS> SAM
>
>
> Steve Odom wrote:
>
>> Hi list,
>>
>> My tag_question_user join table is not currently a full-blown model.
>> It doesn''t have a primary key - just tag_id, question_id, and
user_id.
>>
>> I now want to add a primary key to this model (because I want to add
>> a "description" column as well so users can describe the tag.
>>
>> I''m not sure how to add this using migrations.
>>
>> Here is what I have:
>> class AddNotesToTags < ActiveRecord::Migration
>> def self.up
>> add_column :tags_questions_users, "id", :primary_key
>> add_column :tags_questions_users, "description",
:string,
>> :limit => 80, :null => false
>> end
>>
>> def self.down
>> remove_column :tags_questions_users, "id"
>> remove_column :tags_questions_users, "description"
>> end
>> end
>>
>> That''s giving me this error:
>>
>> Mysql::Error: #42000You have an error in your SQL syntax; check the
>> manual that
>> corresponds to your MySQL server version for the right syntax to use
>> near '''' at
>> line 1: ALTER TABLE tags_questions_users ADD id
>>
>> Any suggestions?
>>
>> Thanks,
>>
>> Steve
>> http://www.smarkets.net
>>
>>
------------------------------------------------------------------------
>>
>> _______________________________________________
>> Rails mailing list
>> Rails@lists.rubyonrails.org
>> http://lists.rubyonrails.org/mailman/listinfo/rails
>>
>>
>
> _______________________________________________
> Rails mailing list
> Rails@lists.rubyonrails.org
> http://lists.rubyonrails.org/mailman/listinfo/rails
>
>
My table primary key is "DATE" and not "ID"
now When I use mymodel.find("mydate") it''s returns that my
table does
not have a column "id"
ok...
now how to search by DATE and not "id" ?
tks.
Hi Fernando, Fernando wrote:> My table primary key is "DATE" and not "ID" > > now When I use mymodel.find("mydate") it''s returns that my table does not > have a column "id" > ok... > > now how to search by DATE and not "id" ? >Rails is built on top of ActiveRecord which assumes the primary key is a "meaningless" integer. Simply add a date field (I don''t think you can name it just ''date'', but you should check the wiki for reserved / magic words). In Rails, assuming your date column is named ''mydate'', you''ll use mymodel.find(:first, :conditions => ["mydate = ?", mydate]) hth, Bill
On 7/6/06, Fernando <fernando@setti.com.br> wrote:> My table primary key is "DATE" and not "ID" > > now When I use mymodel.find("mydate") it''s returns that my table does > not have a column "id" > ok... > > now how to search by DATE and not "id" ?You need to override AR default with set_primary_key ''date'' in your Model. AR assumes the primary key is called "id". If you are not using legacy schemas, best practice is however using Integer primary keys. Cheers. -- francesco levorato aka flevour http://www.flevour.net/