Allow unspecified join-table columns to use to their default values when adding to a habtm collection

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1860 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Jamis Buck
2005-07-18 11:06:41 +00:00
parent 2e175d35cd
commit 83e2f6ae1e
8 changed files with 36 additions and 8 deletions

View File

@@ -122,8 +122,10 @@ module ActiveRecord
when @association_foreign_key
attributes[column.name] = record.quoted_id
else
value = @owner.send(:quote, record[column.name], column)
attributes[column.name] = value unless value.nil?
if record.attributes.has_key?(column.name)
value = @owner.send(:quote, record[column.name], column)
attributes[column.name] = value unless value.nil?
end
end
attributes
end

View File

@@ -883,6 +883,26 @@ class HasAndBelongsToManyAssociationsTest < Test::Unit::TestCase
assert_equal 2, aredridel.projects(true).size
end
def test_adding_uses_default_values_on_join_table
ac = projects(:action_controller)
assert !developers(:jamis).projects.include?(ac)
developers(:jamis).projects << ac
assert developers(:jamis, :reload).projects.include?(ac)
project = developers(:jamis).projects.detect { |p| p == ac }
assert_equal 1, project.access_level.to_i
end
def test_adding_uses_explicit_values_on_join_table
ac = projects(:action_controller)
assert !developers(:jamis).projects.include?(ac)
developers(:jamis).projects.push_with_attributes(ac, :access_level => 3)
assert developers(:jamis, :reload).projects.include?(ac)
project = developers(:jamis).projects.detect { |p| p == ac }
assert_equal 3, project.access_level.to_i
end
def test_habtm_adding_before_save
no_of_devels = Developer.count
no_of_projects = Project.count

View File

@@ -51,7 +51,8 @@ CREATE TABLE projects (
CREATE TABLE developers_projects (
developer_id int NOT NULL,
project_id int NOT NULL,
joined_on date default NULL
joined_on date default NULL,
access_level smallint default 1
);
CREATE TABLE customers (

View File

@@ -52,7 +52,8 @@ CREATE TABLE `projects` (
CREATE TABLE `developers_projects` (
`developer_id` int(11) NOT NULL,
`project_id` int(11) NOT NULL,
`joined_on` date default NULL
`joined_on` date default NULL,
`access_level` smallint default 1
) TYPE=InnoDB;
CREATE TABLE `customers` (

View File

@@ -70,7 +70,8 @@ create table projects (
create table developers_projects (
developer_id integer not null references developers initially deferred disable,
project_id integer not null references projects initially deferred disable,
joined_on timestamp default null
joined_on timestamp default null,
access_level integer default 1
);
-- Try again for 8i
create table developers_projects (

View File

@@ -21,7 +21,8 @@ SELECT setval('companies_id_seq', 100);
CREATE TABLE developers_projects (
developer_id integer NOT NULL,
project_id integer NOT NULL,
joined_on date
joined_on date,
access_level integer default 1
);
CREATE TABLE developers (

View File

@@ -47,7 +47,8 @@ CREATE TABLE 'projects' (
CREATE TABLE 'developers_projects' (
'developer_id' INTEGER NOT NULL,
'project_id' INTEGER NOT NULL,
'joined_on' DATE DEFAULT NULL
'joined_on' DATE DEFAULT NULL,
'access_level' INTEGER DEFAULT 1
);
CREATE TABLE 'customers' (

View File

@@ -46,7 +46,8 @@ CREATE TABLE projects (
CREATE TABLE developers_projects (
developer_id int NOT NULL,
project_id int NOT NULL,
joined_on datetime default NULL
joined_on datetime default NULL,
access_level int default 1
);
CREATE TABLE customers (