私のレールアプリケーションには、クリックするとあるデータベースからデータをコピーして別のデータベースに挿入するボタンがあります。
octopus gem を使用して、アプリケーションを 2 つのデータベースにリンクしています。
db_A から db_B にレコードをコピーするには、次のコードを使用しています。
Octopus.using(:shard_B) do
@book_new_live = Book.create(
:BK_SUB_FK => @book.BK_SUB_FK,
:BK_TITLE => @book.BK_TITLE,
:BK_SOURCE => "",
:BK_PUB => "",
:BK_COVER => "",
:BK_LABEL_PRODUCT => @book.BK_LABEL_PRODUCT,
:BK_FINAL_LABEL => "",
:BK_VISUAL_METHOD => @book.PRB_VISUAL_METHOD,
:BK_DB => "",
:BK_COVERED_REGION => "",
:BK_VERSION_NO => @book.BK_VERSION_NO,
:BK_SEQ_FILE => "",
)do |primary|
primary.BK_ID = @book.BK_ID
end
end
データのコピー先のデータベース 'db_b' は NULL 値を受け入れず、列を NULL にすることはできず、デフォルト値は 'NONE' です。
また、null 値を受け入れるようにデータベースの構造を変更することも許可されていません。
以下の簡略化されたコードを使用すると、列「BK_SOURCE」、「BK_PUB」、「BK_COVER」... を null にすることはできないというエラー メッセージが表示されます。デフォルトでは、レールはこれらの列に null を渡しています。
したがって、null にできない列に空の文字列を渡す必要があります。
Octopus.using(:shard_B) do
@book_new_live = Book.create(
:BK_SUB_FK => @book.BK_SUB_FK,
:BK_TITLE => @book.BK_TITLE,
:BK_LABEL_PRODUCT => @book.BK_LABEL_PRODUCT,
:BK_VISUAL_METHOD => @book.PRB_VISUAL_METHOD,
:BK_VERSION_NO => @book.BK_VERSION_NO,
)do |primary|
primary.BK_ID = @book.BK_ID
end
end
上記のコードで言及されていない列にレールが null 値を渡さないようにする方法はありますか?