Я использую:
Rails 3.0.9
MSSQL 2005Rails 3 ActiveRecord Вставить Не удается вставить значение Null
У меня есть таблица:
CREATE TABLE [dbo].[edocs](
[id] [int] IDENTITY(1,1) NOT NULL,
[id_claim] [int] NOT NULL,
[id_material] [smallint] NOT NULL,
[is_secondary] [bit] NOT NULL CONSTRAINT [DF_edocs_is_secondary] DEFAULT ((0)),
[title] [varchar](100) COLLATE Ukrainian_CI_AS NOT NULL,
[ext] [varchar](4) COLLATE Ukrainian_CI_AS NOT NULL,
[size] [int] NOT NULL,
[code] [varchar](10) COLLATE Ukrainian_CI_AS NULL,
[receive_date] [datetime] NOT NULL CONSTRAINT [DF_edocs_receive_date] DEFAULT (getdate()),
[reg_date] [datetime] NULL,
[reg_numb] [varchar](10) COLLATE Ukrainian_CI_AS NULL,
[idcead] [int] NULL,
[efile] [int] NULL
)
Некоторые из полей значение по умолчанию (для exapmle receive_date
).
В Rails контроллер я пытаюсь создать новую запись:
Edoc.create(
:id_claim => @claim_index,
:id_material => @doc_code,
:title => @file_list.first[:name],
:ext => @file_list.first[:ext],
:size => @file_list.first[:size],
:code => @materials[@doc_code]["code"]
)
Но я получаю сообщение об ошибке:
ActiveRecord::StatementInvalid (TinyTds::Error: Cannot insert the value NULL int
o column 'receive_date', table 'eFilling.dbo.edocs'; column does not allow nulls
. INSERT fails.: INSERT INTO [edocs] ([id_claim], [id_material], [is_secondary],
[title], [ext], [size], [code], [receive_date], [reg_date], [reg_numb], [idCEAD
], [eFile]) VALUES (100000, 3, 0, N'text', N'rtf', 80
472, N'al', NULL, NULL, NULL, NULL, NULL)):
Но в MSSQL консоли 2005 я могу сделать это:
insert into edocs ([id_claim], [id_material],[title], [ext], [size]) values(1, 1, 'rrr', 'rtf', 123)
I не хотите, чтобы ActiveRecord автоматически завершал запрос, добавив поля, которые не указываются в моем , создайте метод.
Как это сделать?
Спасибо за советы. Но MSSQL 2005 позволяет мне делать ** вставлять в edocs ([id_claim], [id_material], [title], [ext], [size]) значения (1, 1, 'rrr', 'rtf', 123) * * Как вы можете видеть, MSSQL позволяет мне не указывать поле со значением по умолчанию в запросе. MSSQL автоматически вставляет значение по умолчанию (getdate()) –
Тогда почему бы не установить текущую временную метку в качестве значения по умолчанию? –
Как я могу это сделать? ** Edoc.create (: receive_date => Time.now) **? –