2013-04-25 4 views
0

Эй, я просто возвращаюсь в рельсы, и я забыл много вещей, необходимых для работы с некоторыми ассоциациями.Rails/Arel User.where (: id =><Some Other Table> .user_id)

Проблема:

У меня есть две таблицы, Customer с fiels id и user_id и User с полем id. Я хочу получить массив Users, так что Customeruser_id является idUser. Я знаю, как это сделать в 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 

Любая помощь будет здорово, спасибо!

ответ

1

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

Вы тогда будете в состоянии использовать Users.find(id).customers и т.д.

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

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

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

или

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

смотрите мои правки. – DJTripleThreat

+0

Спасибо за помощь. Основная таблица для клиента - «cust» (я не выбрал это!), Поэтому я попробовал то, что вы сказали, а также '.where (« cust.id IS NOT NULL ")' и получил эту ошибку: 'PG :: Ошибка: ERROR: отсутствует запись FROM-clause для таблицы" cust "' Если имеет значение, если имя класса для 'customer' is' Refinery :: Akouo :: Клиент? – DJTripleThreat

+0

Может быть, мне нужно включить клиентов в объединение? Похоже, это результат SQL: 'SELECT COUNT (*) FROM« refinery_users »WHERE (customer.id IS NOT NULL)' – DJTripleThreat

0

Вам не нужно какой-либо запрос Ariel для этого.

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

class User < ActiveRecord::Base 
    has_many :customers 
end 

Заказчик:

class Customer < ActiveRecord::Base 
    belongs_to :user 
end 

Код:

customer = Customer.find(1) 
users = customer.users 
+0

, пожалуйста, ознакомьтесь с моими изменениями. – DJTripleThreat

 Смежные вопросы

  • Нет связанных вопросов^_^