如何在轨道3.2中使用轨道可安装引擎的Rolify?

时间:2012-11-07 20:22:53

标签: ruby-on-rails-3.2 cancan rails-engines

我在我的rails应用程序中使用了cancan和rolify。现在我想在我的rails可安装引擎(隔离命名空间)中使用这些,至少rolify。我努力但是徒劳无功。我将角色模型放在模型/ myengine /和models /中,当之前的失败时。它在角色适配器级别抛出错误说has_role?找不到。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

我在rolify方面遇到了类似的问题。我也无法在可安装的引擎内工作。它看起来好像不适合引擎。我建议您使用simple_roles gem代替 - 这是我使用过的,在可安装引擎中使用它没有问题。

<强>更新 Rolify添加了对命名空间的支持,因此不再有效。我已成功在我的引擎中使用它。您现在可以执行rails g rolify EngineName :: Role EngineName :: User

答案 1 :(得分:0)

我正在转换可工作的Rails 4.2。应用程式加入引擎。这些表已经创建为“用户”,“角色”和“ users_roles”。

要使其在引擎中正常运行,用户只需进行以下自定义即可:

rolify role_cname: 'EngineName::Role', role_join_table_name: 'users_roles'

在控制台中进行测试:

EngineName::User.last.roles
SELECT  "users".* FROM "users"  ORDER BY "users"."id" DESC LIMIT 1
SELECT "roles".* FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = $1  [["user_id", "xxxx"]]

EngineName::User.last.has_role? :admin
SELECT  "users".* FROM "users"  ORDER BY "users"."id" DESC LIMIT 1
SELECT "roles".* FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = $1 AND (((roles.name = 'admin') AND (roles.resource_type IS NULL) AND (roles.resource_id IS NULL)))  [["user_id", "xxxx"]]