0
在我的導軌應用程序中,我有一個按鈕,單擊它時,從一個數據庫複製數據並將其插入另一個數據庫。當使用AR創建方法時,導軌通過空值創建方法
我正在使用章魚寶石將我的應用程序鏈接到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傳遞給這些列。
所以我必須將空字符串傳遞給不能爲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將空值傳遞給上面代碼中沒有提到的列?
感謝您的建議。我想保持我的代碼簡單,並且不包含我沒有數據例如'BK_DB'的列。有沒有一種方式設置導軌應用程序傳遞'無'作爲默認而不是空? – Kim 2013-02-25 17:50:50
那好吧。 'create'方法接受一個'hash'來傳遞。所以如果你在你的散列上應用'delete_if',使條件成爲「刪除所有nil值」,那麼我相信它會起作用。我將用一些示例代碼編輯答案。 – MurifoX 2013-02-25 18:50:58