2

私が使用しているもの:
Rails 3.0.9
MSSQL 2005

私はテーブルを持っています:

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

)。

一部のフィールドにはデフォルト値があります(例の場合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)

createメソッドで指定されていないフィールドを追加してActiveRecordがクエリを自動完了させたくありません。

どうやってやるの?

4

1 に答える 1

0

挿入するストレートSQLクエリを作成し、「not null」フィールドの値を指定せず、デフォルト値がない場合でも、SQLエラーがスローされると思います。これらのフィールドでNULLを許可するか、デフォルト値(''または0?)を指定することをお勧めします。

これは単なるRailsの問題ではなく、SQLクエリ自体に帰着します。

たとえば、「id」、「email」、「name」のテーブルの場合、「name」はnullではなく、デフォルト値もありません。これは失敗します。

INSERT INTO table (id, email) VALUES ('3', 'test@example.com')

SQLがNULL「name」への値としてまたは空になると

デフォルト値なしでnullでない場合は、「必須フィールド」のようなものと考えてください。

于 2012-05-09T18:10:38.727 に答える