麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Ruby > 正文

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

2020-10-29 19:40:53
字體:
來源:轉載
供稿:網友

 我非常高興在宣布Rails 4.0 現在支持 PostgreSQL 數組類型. 你可以方便的在migration通過 :array => true里創建數組類型的字段. 創建數組類型的字段的時候還可以添加其它的選項(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

需要注意在是對數組類型的字段設置默認值的時候,你應該用Postgresql里的寫法({value,another value}), 如果你想設置數組類型的字段默認值為空數組的時候,你應該使用: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數組的例子

我們現在有個包含first_name, last_name, nickname的user model, 其中nickname字段是數組類型. 下面的migration代碼會創建相應的表:
 

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')

如果,我們調用john.nickname, 結果會返回nil, 并且在postgreSQL 里存儲的是NULL值.

我們通過下面的代碼可以在創建時,設置nickname屬性值 
 

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

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

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

john = User.first john.nicknames += ['Jackie boy']# 或者john.nicknames = john.nicknames.push('Jackie boy')# 任何時候,屬性通過"="賦值,ActiveRecord會跟蹤這個更改john.save john.reloadjohn.nicknames#=> ['Jack', 'Johnny', 'Jackie Boy'] john.nicknames.popjohn.nicknames_will_change!# '#pop'操作會改變數組的值,所以我們需要告訴ActiveRecord它將會發生更改john.save

 

最后一項在Postgresql中使用數組要注意的事情是: 數組沒有元素數量限制,可以是多維數組,但是在使用多維數組時, 子數組元素個數必須是一樣的.

 

[[1,2,3], [2,3,4], [4,5,nil]]# 在PostgreSQL 可用,每個子數組元素個數一樣 [1,2,[3,4]]# 不可用的數組

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品久久久久久久久久iiiii | 精品麻豆cm视频在线看 | 久久久精品视频免费看 | 国产在线观看一区二区三区 | 黄色免费小视频网站 | 欧美成人三级视频 | 久久国产中文 | 久久精精品 | 久久艳片| 国产精品久久久久久久不卡 | 久草免费资源视频 | av在线播放免费 | 91色一区二区三区 | 久久精品伊人网 | 国产一级桃视频播放 | 久久国产亚洲精品 | 在线中文字幕不卡 | 免费观看国产精品视频 | 午夜视频色 | 久久久久亚洲精品国产 | 免费日韩片 | 毛片在线视频观看 | 欧美一级淫片免费视频1 | 午夜视频久久久 | 亚洲精品午夜视频 | 视频一区国产 | 日本欧美一区 | 在线无码 | 欧美一区二区黄 | 欧美日本在线播放 | 久草在线视频中文 | 国产成人综合在线观看 | 成人毛片在线免费看 | 亚洲自拍第二页 | av免费在线网站 | 中文在线国产 | 亚洲一区二区在线免费 | 中文成人在线 | 国产成人高清成人av片在线看 | 久草在线视频免费播放 | 视频一区二区久久 |