В моей модели Organisation
has_many :users
, а User
has_and_belongs_to_many :roles
и Role
имеет name
и has_and_belongs_to_many :users
.
В моем Organisation
классе Iесть метод get_admin
, который должен получить User
, принадлежащий тому Organisation
, который имеет Role
'admin'
.Вот так:
def get_admin
return self.users.with_role('admin')
end
Увы, это возвращает ActiveRecord::Relation
объект, а не User
.
Я попытался добавить .first
в конец строки, например,
def get_admin
return self.users.with_role('admin').first
end
Но тогда все, что я получаю, это ошибка SQL
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: role.name: SELECT "users".* FROM "users" WHERE ("users".organisation_id = 2) AND (role.name == 'admin') LIMIT 1
Моя схема определена так:
create_table "roles", :force => true do |t|
t.string "name", :null => false
end
create_table "users", :force => true do |t|
t.string "username", :null => false
t.integer "organisation_id"
end
create_table "roles_users", :id => false, :force => true do |t|
t.integer "user_id"
t.integer "role_id"
end
create_table "organisations", :force => true do |t|
t.string "name", :null => false
t.string "website", :null => false
end
Как бы я переписал Organisation
s get_admin
метод (как показано ниже) для возврата фактического User
?
def get_admin
return self.users.with_role('admin')
end
Cheers
Dave