国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

簡單介紹Ruby on Rails對PostgreSQL數(shù)組類型的支持

2019-10-26 19:26:10
字體:
供稿:網(wǎng)友

 我非常高興在宣布Rails 4.0 現(xiàn)在支持 PostgreSQL 數(shù)組類型. 你可以方便的在migration通過 :array => true里創(chuàng)建數(shù)組類型的字段. 創(chuàng)建數(shù)組類型的字段的時候還可以添加其它的選項(length,default,等等)
 

create_table :table_with_arrays do |t| t.integer :int_array, :array => true # integer[] t.integer :int_array, :array => true, :length => 2 # smallint[] t.string :string_array, :array => true, :length => 30 # char varying(30)[]end

需要注意在是對數(shù)組類型的字段設(shè)置默認值的時候,你應(yīng)該用Postgresql里的寫法({value,another value}), 如果你想設(shè)置數(shù)組類型的字段默認值為空數(shù)組的時候,你應(yīng)該使用:default => '{}'
 

create_table :table_with_arrays do |t| t.integer :int_array, :array => true, :default => '{}' # integer[], default == [] t.integer :int_array, :array => true, :length => 2, :default => '{1}' # smallint[], default == [1]end


在Model里使用Postgresql數(shù)組的例子

我們現(xiàn)在有個包含first_name, last_name, nickname的user model, 其中nickname字段是數(shù)組類型. 下面的migration代碼會創(chuàng)建相應(yīng)的表:
 

create_table :users do |t| t.string :first_name t.string :last_name t.string :nicknames, :array => trueend

并且對于這個表,我們有個簡單的model
 

class User < ActiveRecord::Base attr_accessible :first_name, :last_name, :nicknamesend

我們沒有對字段使用默認值,如果我們實例一個User 對象,代碼是這樣的.
 

john = User.create(:first_name => 'John', :last_name => 'Doe')

如果,我們調(diào)用john.nickname, 結(jié)果會返回nil, 并且在postgreSQL 里存儲的是NULL值.

我們通過下面的代碼可以在創(chuàng)建時,設(shè)置nickname屬性值 
 

john = User.create(:first_name => 'John', :last_name => 'Doe', :nicknames => ['Jack', 'Johnny'])

如果我們從數(shù)據(jù)庫獲取記錄,那么nick_name字段會轉(zhuǎn)變成一個數(shù)組,而不是返回字符串{Jack, Johnny}!。Rails 4.0擁有一個純Ruby數(shù)組轉(zhuǎn)換器,但是如果你想讓轉(zhuǎn)換過程加速,那么就可以使用之前提到的 pg_array_parser gem。PgArrayParser 擁有一個基于C的擴展,還有一個JRuby的Java的實現(xiàn)(即使這個gem現(xiàn)在在JRuby上存在些問題,我正在嘗試去解決這個問題。)

有一個重點需要注意的,就是當(dāng)在一個model中和數(shù)組(或者其他可變數(shù)值)交互的時候。ActiveRecord現(xiàn)在并沒有跟蹤"destructive",或者更改發(fā)生的地方。這包括數(shù)組的push和pop操作。如果你需要使用"destructive"更新,你必須使用call<屬性>_will_change!這樣可以讓ActiveRecord知道你需要更改屬性的值。對于我們的這個User model,如果你想在nickname后面追加元素,你可以這樣做:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 永平县| 安阳县| 金山区| 类乌齐县| 镇远县| 遵化市| 论坛| 南涧| 广宗县| 长治县| 忻城县| 包头市| 乾安县| 屏南县| 镇江市| 施秉县| 进贤县| 北川| 北海市| 桂阳县| 鞍山市| 阿坝县| 闽清县| 太谷县| 恩平市| 北宁市| 绥芬河市| 青河县| 重庆市| 彰化县| 精河县| 巨鹿县| 八宿县| 拜城县| 澳门| 黎川县| 乌鲁木齐市| 吴忠市| 阜新| 确山县| 通化市|