2012-10-17 66 views
0

可能重複:
Rails 「find_all_by」 vs 「.where」Rails的VS find_by_column之間差,其中

在這一段代碼

我想知道什麼線1和2

之間的差

COLUMN_NAME不是零或唯一值。

def get_row 
    id = "someidhere" 
1 r = Model.find_by_COLUMN_NAME(id) 
2 r = Model.where('COLUMN_NAME = ? ', id).first 
    if !r.nil? 
    r 
    else 
     nil 
    end 
    end 

2是否比1更明確?我應該注意哪些副作用? (如果id爲零,或搜索非現有id)

我之前使用的是find_by_COLUMN_NAME,而我正在獲取意外結果

當函數返回時,我打電話給r.id.to_s其中r應該是Model的一個實例,但是,有時我會從無處獲取值2

回答

1

.where方法返回一個ActiveRecord關係,這意味着它們可以與其他方法和作用域鏈接在一起,如Model.where(:user_id => id).published。動態查找器(.find_by_name等)返回模型實例或數組,它們不能與其他範圍鏈接。當預期的記錄中沒有找到(而不是nil[],或空關係)如果與感嘆號,例如使用

動態發現者可返回一個錯誤ActiveRecord::RecordNotFoundUser.find_by_email!('[email protected])`。

它們各有其用途;您可以根據您的方法被調用的情況來決定。

相關問題