1

在我的模型Organisation has_many :users中,一个和一个User has_and_belongs_to_many :roles和一个Role有一个namehas_and_belongs_to_many :users

在我的Organisation课堂上,我有一个方法get_admin应该UserOrganisation拥有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'get_admin方法(如下)以返回实际的User

def get_admin
  return self.users.with_role('admin')
end

干杯

戴夫

4

1 回答 1

1

在用户模型中创建一个名为 admin 的范围

用户.rb:

scope :admin, joins(:role).where('roles.name = ?', 'admin')

而 get_admin 方法应该是

def get_admin
  return self.users.admin.first
end
于 2011-08-30T09:14:23.247 回答