2017-03-29 3 views
0

재생 목록 모델이 있다면 어떻게 배열을 열로 푸시 할 수 있습니까?Ruby on Rails - 열을 배열에 추가하기

#<Playlist id: 1, title: "This is a playlist", songs_ids: 1> 

배열을 songs_ids 열로 푸시하려면 어떻게해야합니까?

이것은 songs_ids 열이 나는 특성을 업데이트하고 그것에 노래의 annother ID를 추가하려고했습니다

add_column :playlists, :songs_ids, :integer, array: true, default: [] 

처럼 보이게하는 방법입니다,하지만 난 그것으로 운이없는 중 하나

Playlist.find(1).update_attribute(songs_ids: [1, 2]) 
+0

의 사용 가능한 복제 [레일 : 마이그레이션을 추가하면 배열 (기본 빈)을 추가하려면 (http://stackoverflow.com/questions/20937792/rails-adding-migration-to-add-an-array- default-empty) – DiodonHystrix

+0

모델 클래스에서 배열을 직렬 처리 하시겠습니까? '직렬화 : Playlist.rb''에서 song_ids, Array' http://apidock.com/rails/ActiveRecord/Base/serialize/class – KyleHodgetts

+0

@muistooshort 내가 생산 –

답변

1

Postgresql을 사용하는 경우 update_all 메서드를 사용하여 모델의 배열 열을 간단하게 업데이트 할 수 있습니다.

Playlist.where(id: 1).update_all(songs_ids: [1,2]) 

참고 : Playlist.find(1)...과 함께 작동하지 않습니다.

당신은 serialize을 고려해 볼 수 있습니다 MySQL을 사용하면 문자열 형식의 열을 사용해야합니다.

def change 
    add_column :playlists, :songs_ids, :string 
    end 

그런 다음 모델에서 직렬화 할 속성을 지정하십시오.

class Playlist < ActiveRecord::Base 
    serialize :songs_ids, Array 
end 

그런 다음 아무 값이나 테스트하여 테스트 할 수 있습니다.

playlist = Playlist.first 
playlist.songs_ids << 1 
=> [1] 
playlist.save 
playlist.songs_ids << 2 
=> [2] 
playlist.save 
playlist.songs_ids 
=> [1, 2] 
+0

Postgres와 함께 사용하면 개발 중입니까? –

+0

이 작업은 PostgreSQL에서 작동합니다. Mysql에서는 작동하지 않습니다.이 작업 후에는 'songs_ids' 속성을'nil'으로 유지합니다. –

+0

내가 연재를하더라도 그것은 작동하지 않는다. 왜냐하면 내가 언급 한 것처럼 데이터베이스와 관련이 있다고 생각하기 때문이다. –