Hello I have two models: app/model/user.rb class User < ActiveRecord::Base has_and_belongs_to_many :roles end app/model/role.rb class Role < ActiveRecord::Base has_and_belongs_to_many :users end And one controller: class Admin::UsersController < ApplicationController # ... def user_save usr, id = nil roles = usr[:roles].each_key do |role| roles << Role.find(:first, :conditions => {:id => role}) end if id.nil? user = User.new :first_name => usr[:first_name], :last_name => usr[:last_name] else user = User.find :first, :conditions => {:id => id} user.first_name = usr[:first_name] user.last_name = usr[:last_name] end user.save user.roles = roles user.save end private :user_save end
% sqlite db/library_development.db SQLite version 2.8.16 Enter ".help" for instructions
SELECT * FROM roles_users;
1|1|1
.schema roles_users
CREATE TABLE roles_users ("id" INTEGER PRIMARY KEY NOT NULL, "role_id" integer DEFAULT NULL, "user_id" integer DEFAULT NULL, FOREIGN KEY (role_id) REFERENCES roles (id), FOREIGN KEY (user_id) REFERENCES users (id));
.quit
From log: Role Load (0.000510) SELECT * FROM roles WHERE (roles."id" = '1') LIMIT 1 User Load (0.000711) SELECT * FROM users WHERE (users."id" = '2') LIMIT 1 SQL (0.000675) PRAGMA table_info(users) User Indexes (0.000181) PRAGMA index_list(users) User Update (0.058220) UPDATE users SET "last_name" = 'xxxx', "first_n ame" = 'yyyy' WHERE "id" = 2 SQL (0.000738) PRAGMA table_info(roles_users) Role Load (0.000789) SELECT * FROM roles INNER JOIN roles_users ON roles.id = roles_users.role_id WHERE (roles_users.user_id = 2 ) SQL (0.000580) PRAGMA table_info(roles) Role Indexes (0.000221) PRAGMA index_list(roles) SQL (0.000629) PRAGMA table_info(roles_users) SQL (0.000000) SQLite::Exceptions::SQLException: PRIMARY KEY must be unique: INSERT INTO roles_users ("role_id", "id", "user_id") VALUES (1, 1, 2)
What can be wrong? Why it inserts it owns id?