在我的 rails 应用程序中,我有一个按钮,单击该按钮时,会从一个数据库复制数据并将其插入另一个数据库。
我正在使用章鱼 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”不接受空值,列不能为空,默认值为“NONE”。
此外,我不允许修改数据库的结构,以便它可以接受空值。
如果我使用下面的简化代码,我会收到一条错误消息,通知我列“BK_SOURCE”、“BK_PUB”、“BK_COVER”...不能为空。默认情况下,rails 将 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
有没有办法防止rails将空值传递给上面代码中没有提到的列?