Railsで配列列をどのように宣言しますか?Railsで配列列を追加
詳細
私は、次のモデル
rails generate model User address:text
を持っていますが、私は、ユーザーごとに複数のアドレスを格納できるモデルをしたいです。次の宣言でエラーが返される
rails generate model User address[]:text
どのようにして配列列をRailsに宣言しますか?
Railsで配列列をどのように宣言しますか?Railsで配列列を追加
詳細
私は、次のモデル
rails generate model User address:text
を持っていますが、私は、ユーザーごとに複数のアドレスを格納できるモデルをしたいです。次の宣言でエラーが返される
rails generate model User address[]:text
どのようにして配列列をRailsに宣言しますか?
あなたはPostgresのを使用している場合は、この記事http://blog.plataformatec.com.br/2014/07/rails-4-and-postgresql-arrays/は、移行スクリプトでarray: true
オプションを使用することを提案している:あなたはPostgresのを使用していない場合は
create_table :users do |t|
# other columns
t.text : addresses, array: true, default: []
エンド
、この答えは役に立つかもしれません:Storing arrays in database : JSON vs. serialized array
次の手順を使用できます。
rails g migration add_subjects_to_book subjects:text
0123我々は今、それを確認することができます
class AddSubjectsToBook < ActiveRecord::Migration
def change
add_column :books, :subjects, :text, array:true, default: []
end
end
:
、移行ファイル
2.1.2 :001 > b = Book.create
(0.2ms) BEGIN
SQL (2.0ms) INSERT INTO "books" ("created_at", "updated_at") VALUES ($1, $2) RETURNING "id" [["created_at", "2014-10-17 08:21:17.870437"], ["updated_at", "2014-10-17 08:21:17.870437"]]
(0.5ms) COMMIT
=> #<Book id: "39abef75-56af-4ad5-8065-6b4d58729ee0", title: nil, created_at: "2014-10-17 08:21:17", updated_at: "2014-10-17 08:21:17", description: {}, metadata: {}, subjects: []>
2.1.2 :002 > b.subjects.class
=> Array
あなたがテーブルを作成している間、アレイを追加したい場合は
create_table :products do |t|
t.string :name, null: false
t.references :category, null: false
t.text :tags, array: true, default: []
end
例を次のようにあなたが行うことができますarray: true
を使用するには、Postgresまたは配列タイプが可能な他のデータベースが必要です。 MySQLの場合は、汎用シリアル化を使用します。これにより、任意の型を列に格納できます。
create_table :users do |t|
t.text :addresses, default: [].to_yaml
...
end
class User < ActiveRecord::Migration
serialize :addresses, Array
end
u = User.new
u.update_attributes addresses: ["123 Evergreen", "246 Main"]
通常の注意点は、データベースに配列を格納する場合に適用されます。これを行うためにリレーショナルデータベースのグレインに反して、個々のアイテムを検索するようなことをするのは難しく、遅く、不可能になります。しかし、あなたがそれらのことをする必要があるまで基本的なストレージのための良い解決策になることができます。
[データベース内の配列の格納:JSONとシリアル化された配列](http://stackoverflow.com/questions/21312278/storing-arrays-in-database-json-vs-serialized-array) –
おそらくhttp://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many ... –