2015-04-08 1 views
0

У меня есть две модели в Rails:Создать контекстными отношения с Rails 4

class User < ActiveRecord::Base 
    enum user_type: [:admin, :normal] 
end 

и

class Department < ActiveRecord::Base 
end 

Inclusive я написал следующее RSpec тест:

require 'rails_helper' 

RSpec.describe User, :type => :model do 
    it { should belong_to(:department).conditions(user_type: :admin)} 
end 

Что мне нужно, и Я не знаю, как это реализовать. Как я могу создать связь между двумя моделями в зависимости от их типа?

Другими словами, как это сделать только для пользователей с типом «admin»?

Ссылку или подобные вопросы, которые я видел, не работает для меня, тест по-прежнему не

+0

Или, если 'user_type' является« нормальным », то? –

ответ

1

Вы можете использовать объем как:

class User < ActiveRecord::Base 
    enum user_type: [:admin, :normal] 
    belongs_to :department, -> { joins(:users).where("users.user_type = ?", 0) } 
end 

Associations are built from Relations, и вы можете использовать синтаксис Relation для их настройки. Внутри блока -> { ... } вы можете использовать все обычные методы Relation.

+0

Спасибо большое ... его работа сейчас: D – psantos

+0

hi @Arup, Я нашел проблему ... Определив этот способ, мой тест проходит ... но есть ошибка: он пытается построить выбор например: «SELECT» отделы ». * FROM« отделы »WHERE« отделы ».« id »= $ 1 AND« department ».« user_type »= 'admin' LIMIT 1' – psantos

+0

Обратите внимание, что столбец' user_type' существует только на USER таблицу, а не на таблицу департамента – psantos

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