ruby-on-rails-3
  • activerecord
  • 2011-09-16 62 views 5 likes 
    5

    我是新來的鐵軌,這可能看起來很明顯,但無法找到答案。。在哪裏找到。 ActiveRecord ::關係NoMethodError

    當我這樣做

    u = User.where("email=?", email_string) 
    u.name = "new name" 
    

    不工作我不斷收到

    NoMethodError: undefined method `name=' for #<ActiveRecord::Relation:0x1049c2890> 
    

    但如果我改變

    u = User.where("email=?", email_string) 
    

    u = User.find_by_email(email_string) 
    

    我可以看到我的更改正在持續存在,並且沒有錯誤發生。

    所以我錯過了什麼。是。其中返回一個只讀對象或東西?

    +0

    根本沒有這種技術的經驗,但我的猜測是'where'正在返回一個集合/數組,其中'find_by_email'返回單個記錄? –

    回答

    17

    。其實是一個範圍,實際上是返回一個用戶集合而不是一個集合。你可以用

    User.where('email = ?', email_string).first 
    

    獲得第一個匹配的用戶(如.find_by_email一樣)。此外,你可以返回一個集合與

    User.find_all_by_email(email_string) 
    

    我希望這有助於。

    +0

    感謝莫斯,現在有道理。 – user368005

    +1

    我知道這個問題是專門針對rails-3的,但對於任何在rails-4上嘗試這個問題的人,動態查找器find_all_by _...已被棄用,新語法爲'find_by email:'email_string'' https: //github.com/rails/activerecord-deprecated_finders – waffl

    相關問題