[RUBY-ON-RAILS] 새로운 데이터는 포스트 그레스에 레일 배열 열을 지속하지
RUBY-ON-RAILS새로운 데이터는 포스트 그레스에 레일 배열 열을 지속하지
나는 형 텍스트의 친구 열이있는 사용자 모델을 가지고있다. 이 마이그레이션은 포스트 그레스와 배열 기능을 사용하려면 실행되었다 :
add_column :users, :friends, :text, array: true
사용자 모델은이 방법이 있습니다 :
def add_friend(target)
#target would be a value like "1234"
self.friends = [] if self.friends == nil
update_attributes friends: self.friends.push(target)
end
내가 #add_friend를 호출 한 후 user.reload을 추가 할 때까지 다음 사양을 전달합니다
it "adds a friend to the list of friends" do
user = create(:user, friends: ["123","456"])
stranger = create(:user, uid: "789")
user.add_friend(stranger.uid)
user.reload #turns the spec red
user.friends.should include("789")
user.friends.should include("123")
end
이뿐만 아니라 개발에 발생합니다. 모델 인스턴스를 업데이트하고 배열의 새로운 UID를 가지고 있지만, 다시로드하거나 다른 행동에 사용자를 다시로드하면, 그것은 add_friend 메소드가 호출되기 전에 사용했던갑니다된다.
레일을 사용 4.0.0.rc2 및 페이지 0.15.1
이것은 무엇을 할 수 있을까?
해결법
-
==============================
1.나는 물론, 기본 배열 참조 할 때 변경되지 않습니다, 때문에 액티브 친구 어레이가 변경된 것을 알아 차리지되지 않는다고 생각 :
나는 물론, 기본 배열 참조 할 때 변경되지 않습니다, 때문에 액티브 친구 어레이가 변경된 것을 알아 차리지되지 않는다고 생각 :
self.friends.push(target)
즉, 배열의 내용을 변경하지만 배열 자체는 여전히 같은 배열이됩니다. 나는이 문제가 Rails3에서 postgres_ext 보석과 함께 작물이 문제를 주어진 것을 알고있다 :
나는 Rails4이 같은 방식으로 행동하는 기대.
이 솔루션은 오히려 현재 위치에서 배열을 수정하는 것보다 새로운 배열을 생성하는 것입니다 :
update_attributes friends: self.friends + [ target ]
하나 당신이 좋아하는 중 기존 배열 사용에 요소를 추가하는 동안 새로운 배열을 생성 할 수있는 여러가지 방법이 있습니다.
-
==============================
2.문제가 자리에 배열을 수정 추진의 사용,있을 것 같습니다.
문제가 자리에 배열을 수정 추진의 사용,있을 것 같습니다.
나는 기압보다 기본 소스를 찾을 수 있지만,이 게시물은 말합니다 :
-
==============================
3.당신은 PostgreSQL의 배열 형식을 사용하려면, 당신은 그 형식을 준수해야합니다. PostgreSQL의 문서의 입력 형식은
당신은 PostgreSQL의 배열 형식을 사용하려면, 당신은 그 형식을 준수해야합니다. PostgreSQL의 문서의 입력 형식은
'{10000, 10000, 10000, 10000}'
어떤 friends.to_s가 반환됩니다 것이 아니다. 루비 :
[1,2,3].to_s => "[1,2,3]"
그 대신 중괄호의 브라켓입니다. 당신은 변환 스스로해야 할 것이다.
그러나 나는 차라리 (직렬화 참조) 액티브의 직렬화에 의존하는 것입니다. 데이터베이스는 그 데이터베이스에 유출 도메인 모델의 값이 실제로 배열 인 것을 알 필요가 없습니다. 하자 레일은 일하고 캡슐화 정보를한다; 이미 직렬화 / 값을 역 직렬화 방법을 알고 있습니다.
참고 :이 응답은 레일 3에 적용하지 4. 나는 그것이 미래에 누군가가 도움이 경우에 여기에 떠날거야.
from https://stackoverflow.com/questions/17283854/new-data-not-persisting-to-rails-array-column-on-postgres by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 사회 활동 스트림을 구현하는 가장 좋은 방법은 무엇입니까? [닫은] (0) | 2020.02.06 |
---|---|
[RUBY-ON-RAILS] 루비 블록 구문 오류 [중복] (0) | 2020.02.06 |
[RUBY-ON-RAILS] MySQL의 :: 오류 : 지정된 키가 너무 깁니다; 최대 키 길이는 1000 바이트입니다 (0) | 2020.02.06 |
[RUBY-ON-RAILS] 종이 클립 예외 : 종이 클립 :: AdapterRegistry :: NoHandlerError (0) | 2020.02.06 |
[RUBY-ON-RAILS] 어떻게 레일 4.2 개발 서버의 IP를 기본 바인딩을 변경하려면? (0) | 2020.02.06 |