Разница между находкой и где с отношениями - PullRequest
6 голосов
/ 06 марта 2011

Я не думаю, что есть разница, когда дело доходит до активной записи и поиска данных.

Вот мои модели

class User < ActiveRecord::Base
  has_many :shows
end

class Show < ActiveRecord::Base
  belongs_to :user
end

Когда я использую консоль rails, я могу сделатьи это работает.

u = User.find(1)
u.shows

Это дает мне все шоу для этого пользователя.

Однако, когда я делаю

u = User.where("username = ?", "percent20")
u.shows # this is doesn't work gives me a now instance error

, я получаю того же пользователя исоответствующая информация, но не отношения.Единственная проблема, которую я вижу, может быть, я делаю что-то не так, потому что есть разница между где и найти.

Любая помощь приветствуется.

Ответы [ 3 ]

10 голосов
/ 07 марта 2011

Проблема не в отношениях.

 u = User.find(1) 

возвращает одного пользователя

 #return a Set of users. In your case its only one user.
 u = User.where("username = ?", "percent20") 

Тип результата ActiveRecord :: Relation -> [Пользователь, Пользователь, Пользователь]

используйте, например, first, чтобы получить первого пользователя

 #returns the first user
 u = User.where("username = ?", "percent20").first

u.class.name => "User"

5 голосов
/ 07 марта 2011

User.find (1) извлекает определенную запись с ее идентификатором, тогда как User.where ("username =?", "Процент20") извлекает набор записей, соответствующих условию.

Попытка:

u = User.where("username = ?", "percent20").first
u.shows
3 голосов
/ 07 марта 2011

, где - это метод, который возвращает массив объектов.Итак, в вашем случае попробуйте

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