레일 응용 프로그램에서 클릭 할 때 한 데이터베이스의 데이터를 복사하여 다른 데이터베이스에 삽입하는 버튼이 있습니다.AR을 사용하여 만들 때 레일이 null 값을 전달합니다.
내 응용 프로그램을 2 개의 데이터베이스에 연결하기 위해 문어 보석을 사용하고 있습니다.
나는 아래의 코드를 사용하고, db_B에 db_A에서 기록을 복사하려면 null 값을 허용하지 않습니다,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 일 수 없습니다 및 기본값은 '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 값을 전달하는 것을 방지하는 방법이 있습니까?
제안 해 주셔서 감사합니다. 코드를 간단하게 유지하고 BK_DB와 같은 데이터가없는 열은 포함하지 않으려합니다. 레일 앱을 null 대신 기본값으로 '없음'을 전달하도록 설정하는 방법이 있습니까? – Kim
그럼. 'create' 메쏘드는 전달 될'hash'를 받아들입니다. 그래서 당신이 해시에'delete_if'를 적용하면 조건을 "모든 nil 값을 제거하십시오"가되게 만들면 작동 할 것이라고 믿습니다. 몇 가지 샘플 코드로 답을 수정하겠습니다. – MurifoX