I'm struggling to get ActiveScaffold working with users, roles and
has_many through association between them (I'm using the rails-
authorization-plugin).
class Role < ActiveRecord::Base
has_many :roles_users, :dependent => :delete_all
has_many :users, :through => :roles_users
belongs_to :authorizable, :polymorphic => true
end
class User < ActiveRecors::Base
has_many :roles_users, :dependent => :delete_all)
has_many :roles, :through => :roles_users
end
class UsersController < ApplicationController
active_scaffold do |config|
config.columns = [:email, :active, :roles]
end
end
I see the roles of the user as a link (
http://local.host:3000/admin/2/
nested?_method=get&associations=roles) in my view, but when I follow
this link I get an error:
ActiveRecord::StatementInvalid (Mysql::Error: Unknown column
'
roles_users_roles.id' in 'field list': SELECT `roles`.`id` AS t0_r0,
`roles`.`name` AS t0_r1, `roles`.`authorizable_type` AS t0_r2,
`roles`.`authorizable_id` AS t0_r3, `roles`.`created_at` AS t0_r4,
`roles`.`updated_at` AS t0_r5, `users`.`id` AS t1_r0, `users`.`email`
AS t1_r1, `users`.`encrypted_password` AS t1_r2, `users`.`salt` AS
t1_r3, `users`.`token` AS t1_r4, `users`.`token_expires_at` AS t1_r5,
`users`.`email_confirmed` AS t1_r6, `users`.`active` AS t1_r7,
`roles_users_roles`.`id` AS t2_r0, `roles_users_roles`.`user_id` AS
t2_r1, `roles_users_roles`.`role_id` AS t2_r2,
`roles_users_roles`.`created_at` AS t2_r3,
`roles_users_roles`.`updated_at` AS t2_r4, `users_roles_users`.`id` AS
t3_r0, `users_roles_users`.`email` AS t3_r1,
`users_roles_users`.`encrypted_password` AS t3_r2,
`users_roles_users`.`salt` AS t3_r3, `users_roles_users`.`token` AS
t3_r4, `users_roles_users`.`token_expires_at` AS t3_r5,
`users_roles_users`.`email_confirmed` AS t3_r6,
`users_roles_users`.`active` AS t3_r7 FROM `roles` LEFT OUTER JOIN
`roles_users` ON (`roles`.`id` = `roles_users`.`role_id`) LEFT OUTER
JOIN `users` ON (`users`.`id` = `roles_users`.`user_id`) LEFT OUTER
JOIN `roles_users` roles_users_roles ON roles_users_roles.role_id =
roles.id LEFT OUTER JOIN `users` users_roles_users ON
`users_roles_users`.id = `roles_users_roles`.user_id WHERE (
users.id
= '2') AND `roles`.id IN (2, 4) ORDER BY roles.`id` ASC):
The SQL statement is wrong, there is no
roles_users_roles.id, but I
think I'm doing something wrong here and using the wrong approach.
In the end I want something with config.columns[:roles].form_ui
= :select in the users controller, but this fails to render (also a
sql error Unknown column 'users_users.user_id' in 'on clause':
SELECT ......)
Can someone help me out?
Thanks, Frank