Rails / Arel User.where (: id => <Некоторая другая таблица>.user_id)

Эй, я только возвращаюсь к рельсам и забыл много вещей, необходимых для работы с некоторыми ассоциациями.

Эта проблема:

У меня есть две таблицы, Customer с полями id а также user_id а также User с полем id, Я хочу получить массив Users такой, что Customer"s user_id это id из User, Я знаю, как сделать это в SQL, но забыл, как это сделать в Ariel.

редактировать

Поэтому я думаю, что мне нужно объяснить немного больше. Я беру на себя существующий проект. Между пользователями и клиентами существует взаимно-однозначное отношение, однако только некоторые пользователи имеют связанные с ними объекты клиентов, так что user.customer вернусь nil большую часть времени. Мне нужно отредактировать страницу, на которой в данный момент перечислены все пользователи, но теперь мне нужно перечислить только тех пользователей, у которых есть запись о клиенте

Отношения уже созданы предыдущим разработчиком:

class Customer
  belongs_to :user, :class_name => "Refinery::User"
end

Refinery::User.class_eval do
  has_one :customer
end

и у меня есть следующий код в моем контроллере:

def index
  # i need to return an array of users, such that the only
  # users in this array are the ones with a non-nil customer.
  @users = Refinery::User.paginate(:page => params[:page])
end

Любая помощь будет отличной, спасибо!

2 ответа

Вы можете определить ассоциации в двух классах, belongs_to в клиенте и has_many в пользователя.

Затем вы сможете использовать Users.find(id).customers и т.п.

Документация по рельсам объясняет это довольно хорошо - посмотрите на пример клиента и заказов.

обновить после вашего вопроса обновить - попробуйте

User.where("customer.id IS NOT NULL")

или же

@users = Refinery::User.where("customer.id IS NOT NULL").paginate(:page => params[:page])

Вам не нужен запрос Ариэль для этого.

Пользователь:

class User < ActiveRecord::Base
  has_many :customers
end

Покупатель:

class Customer < ActiveRecord::Base
  belongs_to :user
end

Код:

customer = Customer.find(1)
users = customer.users
Другие вопросы по тегам