2012-05-09 2 views
2

Я использую:
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 автоматически завершал запрос, добавив поля, которые не указываются в моем , создайте метод.

Как это сделать?

ответ

0

Я считаю, что даже если вы написали прямые SQL-запросы для вставки и не указали значения для полей «not null», и у них не было значения по умолчанию, вы все равно выбросите SQL-ошибку. Я предлагаю либо разрешить NULL в этих полях, либо давать значение по умолчанию (возможно, «или 0?»).

Это не просто вещь Rails, это сводится к SQL-запросам.

Пример для таблицы с «ид», «электронная почта» и «имя», где «имя» не является недействительным и не имеет значения по умолчанию, это не удастся:

Как передает SQL NULL или пустота в качестве значения для «имя»

Думай его вроде как «нужное поле», когда оно не равно нулю без значения по умолчанию

+1

Спасибо за советы. Но MSSQL 2005 позволяет мне делать ** вставлять в edocs ([id_claim], [id_material], [title], [ext], [size]) значения (1, 1, 'rrr', 'rtf', 123) * * Как вы можете видеть, MSSQL позволяет мне не указывать поле со значением по умолчанию в запросе. MSSQL автоматически вставляет значение по умолчанию (getdate()) –

+0

Тогда почему бы не установить текущую временную метку в качестве значения по умолчанию? –

+0

Как я могу это сделать? ** Edoc.create (: receive_date => Time.now) **? –

Смежные вопросы