2017-12-22 3 views
0

나는 초기 질문을 쉽게 풀 수있는 방법이 없다. 중첩 된 해시 유형의 객체를 활성 레코드로 PG에 저장할 수있는 형식으로 변환하려고합니다. 나는 "중첩 된 - hstore"보석을 시도했지만 그것을 작동시키지 못했습니다. 열을 직렬화하는 등의 시도를했습니다 ... 객체 자체는 객체를 포함하는 다차원 배열입니다. MD 배열을 중첩 된 해시 유형의 구조로 변환하면 MD 배열의 결합 된 인덱스를 나타내는 키가 JSON 변환에 가장 쉽게 포함되어야하는 객체에 직접 해당합니다. 구조체에는 많은 양의 데이터가 포함되어 있으므로 PG/ActiveRecord가 꺼져 있거나 구문의 중요한 부분이 누락되었을 수 있습니다. 여기 레일즈 postgresql의 json 칼럼이 어떤 값을 받아들이지 않고, 저장 후 호출 될 때 nil을 리턴한다.

Turn.create(turn: @counter, board: arrHash.to_json, games_id: 
      @@current_game.id) 
turner = Turn.where(turn:@counter).first 
puts turner.board 

마이그레이션/테이블 :

여기의 전화를 한 후 데이터베이스 항목을 작성 테스트를위한 코드입니다

class CreateTurns < ActiveRecord::Migration[5.1] 
    def change 
    create_table :turns do |t| 
     t.integer :turn 
     t.json :board, default: "{}" 
     t.references :games, foreign_key: true, index: true 

     t.timestamps 
    end 
    end 
end 

이를 저장하기위한 더 좋은 전략 중 하나에 어떤 도움, 또는 아마도 내가 완전히 간과 할 수도있는 구문상의 차이점은 크게 감사 할 것입니다. 감사!

+0

'where'는 관계를 반환합니다. Turn.where (turn : @counter) .to_a 또는 Turn.where (turn : @counter) .last' 등이 필요합니다. – Anthony

+0

죄송합니다. 먼저, 그것이 나에게 힌트를 줄지 알아보기 위해 몇 가지 다른 것들을 시도해 왔습니다. –

+0

'turner.border'의 결과는 무엇입니까? 'create! '할 수도 있고 로그를 보여줄 수 있습니까? – Anthony

답변

0

좋아요, 그렇습니다. Turn 클래스의 belongs_to 속성의 변수가 복수형이 아니었고 이로 인해 제대로 저장되지 못했습니다. to_json 메소드는 PG에 저장하는 데 적합합니다. Anthony에게 도움을 주신 덕분에 구현하고있는 기능을 완성했습니다.

관련 문제