2017-03-29 7 views
0

プレイリストモデルを使用している場合、どのように配列を列にプッシュできますか?Ruby on Rails - 列を配列に追加する

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

配列をsongs_ids列にプッシュしたいのですが何をすればいいですか?

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

これはsongs_ids列は、私は属性を更新し、それに曲のannother IDを追加しようとしましたが、私はそれのいずれかで運を持っていない

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

どのように見えるかです

+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と考えることができます。文字列型の列を使用する必要があります。

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

これをポストグルで使用すると開発中ですか? –

+0

これはPostgreSQLでテストされていますが、これは動作しません.Mysqlでは動作しません。このファイルは操作後に 'songs_ids'属性を' nil'として保持します。 –

+0

あなたが言及したように、私はそれがデータベースと関係していると思うので、シリアル化しても動作しません。これは唯一の回避策ですね。 –

関連する問題