mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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` (
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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' (
|
||||
|
||||
@@ -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 (
|
||||
|
||||
Reference in New Issue
Block a user