Rails находит объект базы данных - PullRequest
0 голосов
/ 28 ноября 2011

У каждого пользователя в моей базе данных есть имя. Как я могу найти пользователя по имени? Я пытаюсь написать эту функцию менее глупо.

def find_by_name(name)
    User.find_each{|u|
    return u if u.first_name == name
  }
  return nil
end

Я предполагал, что это будет работать, но это не так.

>> u = User.first
User Load (0.2ms)  SELECT "users".* FROM "users" LIMIT 1
=> #<User id: 41, first_name: "Justin", last_name: "Bieber", created_at: "2011-11-13 23:13:23", updated_at: "2011-11-13 23:13:23"> 
>> u = User.first(:first_name => "Justin")
ArgumentError: Unknown key: first_name
from /Library/Ruby/Gems/1.8/gems/activesupport-3.1.1/lib/active_support/core_ext/hash/keys.rb:44:in `assert_valid_keys'
from /Library/Ruby/Gems/1.8/gems/activesupport-3.1.1/lib/active_support/core_ext/hash/keys.rb:43:in `each_key'
from /Library/Ruby/Gems/1.8/gems/activesupport-3.1.1/lib/active_support/core_ext/hash/keys.rb:43:in `assert_valid_keys'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.1/lib/active_record/relation/spawn_methods.rb:123:in `apply_finder_options'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.1/lib/active_record/relation/finder_methods.rb:119:in `first'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.1/lib/active_record/base.rb:441:in `__send__'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.1/lib/active_record/base.rb:441:in `first'
from (irb):8

Моя модель выглядит так

class User < ActiveRecord::Base
  has_many :photos
end

Ответы [ 3 ]

3 голосов
/ 28 ноября 2011

User.where(:first_name => name).first

Это будет примерно так:

SELECT * FROM users WHERE first_name=?

(и он будет привязывать параметр к передаваемой строке).

2 голосов
/ 28 ноября 2011

Должна быть встроенная, нет?

User.find_by_first_name("Izzy")
0 голосов
/ 28 ноября 2011

Если предположить, что первые имена не уникальны, вы можете получить либо все совпадающие, либо только первые.

User.find(:all, {:first_name => name})

или

User.find(:first, {:first_name => name})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...