12/22/2006

find_or_create_by :神兵利器

我應該是 lag 很久吧,居然今天才發現 find_or_create_by 這個神兵利器,早點發現我應該可以少打幾百行 code 吧。簡單來說,find_or_create_by 就是先去找說資料庫裡面有沒有這個資料,如果沒有他就順手幫你建立一個。很簡單的概念,但是卻又非常頻繁用到。

使用方式如下

今天有一個 User Model 有兩個 attribute ,其中一個是 name ,另外一個是 email。 如果我們想要找出一個名叫做 'abc' 的使用者,如果沒這個人,就創造一個,然後將他指定到 a 這個 Object 。使用方是就是
a = User.find_or_create_by_name('abc')

仔細去翻 SQL Code,我們可以發現
SELECT * FROM users WHERE (userss.`name` = `abc` ) LIMIT 1
BEGIN
INSERT INTO users (`name`, `email`) VALUES('abc', '')
COMMIT

如果想要更進一步,我們想找出名叫做 'abc' ,並且 email 是 abc@example.com 的使用者,並且將他指定到 Object a。使用方是就是
a = User.find_or_create_by_name_and_email('abc' , 'abc@example.com')

SQL code 就是
SELECT * FROM users WHERE (users.`name` = `abc` and users.`name` = `abc@example.com`) LIMIT 1
BEGIN
INSERT INTO users (`name`, `email`) VALUES('abc', 'abc@example.com')
COMMIT


我果然應該多花點時間再重新閱讀 Ruby on Rails 的書好了,那麼方便的東西居然都不知道。

1 則留言:

匿名 提到...

这下可节约时间了!很感谢!
能不能介绍一些关于身份验证的好文?