I think you want to be using the gem "pg" as your postgresql adapter,
not "postgres".
gem list pg -r
*** REMOTE GEMS ***
pg (0.8.0)
This adapter definitely supports tables without a primary key -
typical join table used for habtm models. For instance the following
migration works to provide role <-> user join. This works with
ruby1.8.7 or 1.9.1 and rails 2.3.0-2.3.4, postgres version 8.3.7.
NNNN_create_role_users.rb
class CreateRoleUsers < ActiveRecord::Migration
def self.up
create_table :roles_users, :id => false do |t|
t.integer :role_id
t.integer :user_id
end
end
models/role.rb
class Role < ActiveRecord::Base
has_and_belongs_to_many :users
models/user.rb
class User < ActiveRecord::Base
has_and_belongs_to_many :roles
On Sep 16, 4:36 pm, Howard Yeh <[email protected]> wrote:
> Hi All,
>
> When saving a record to a table that doesn't use primary key, the
> adapater raises
>
> ActiveRecord::StatementInvalid: PGError: ERROR: column "id" does not
> exist
>
> That's because the postgres adapter does,
>
> INSERT INTO ... RETURNING "id"
>
> And "id" doesn't exist for a table that doesn't ues it.
>
> The offending block of code is from
>
> PostgreSQLAdapter#insert(sql, name = nil, pk = nil, id_value = nil,
> sequence_name = nil)
>
> if supports_insert_with_returning?
> pk, sequence_name = *pk_and_sequence_for(table) unless pk
> if pk
> id = select_value("#{sql} RETURNING #{quote_column_name(pk)}")
> clear_query_cache
> return id
> end
> end
>
> The problem is that ActiveRecord::Base.create
> would pass in the primary_key "id" for the
> parameter pk even though the ActiveRecord class
> doesn't have a primary key.
>
> # this would work
> if supports_insert_with_returning?
> # this would work
> pk, sequence_name = *pk_and_sequence_for(table)
> if pk
> id = select_value("#{sql} RETURNING #{quote_column_name(pk)}")
> clear_query_cache
> return id
> end
> end
>
> Or is there a way to set the primary key to nil?
>
> class Foo < ActiveRecord::Base
> set_primary_key nil
> primary_key # => ""
> end
>
> Howard
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---