У меня есть следующая таблица в моем приложении Rails, который содержит разрешение:Получение недопустимого значения для Integer() в рельсах
id: INTEGER, name: TEXT, controller: TEXT, action: TEXT, description: TEXT, created_at: TEXT, updated_at: TEXT
И я хочу, чтобы написать или обновление к нему всем действиям контроллера в моем приложении, поэтому что они могут использоваться против ролей/пользователей в CanCanCan
.
Это достигается за счет удара метод build
в моем PermissionsController
def build
write_permission("all", "manage", "Everything", "All operations", true)
ApplicationController.subclasses.each do |controller|
if controller.respond_to?(:permission)
controller_class, description = controller.permission
write_permission(controller_class, "manage", description, "All operations")
controller.action_methods.each do |action|
if action.to_s.index("_callback").nil?
action_desc, cancan_action = eval_cancan_action(action)
write_permission(controller_class, cancan_action, description, action_desc)
end
end
end
end
end
Так идея заключается в том, что она перебирает все контроллеры и действия, а затем вызвать вызовы write_permission
, чтобы добавить или обновить БД.
protected
def eval_cancan_action(action)
case action.to_s
when "index", "show", "search"
cancan_action = "read"
action_desc = I18n.t :read
when "create", "new"
cancan_action = "create"
action_desc = I18n.t :create
when "edit", "update"
cancan_action = "update"
action_desc = I18n.t :edit
when "delete", "destroy"
cancan_action = "delete"
action_desc = I18n.t :delete
else
cancan_action = action.to_s
action_desc = "Other: " << cancan_action
end
return action_desc, cancan_action
end
def write_permission(controller, cancan_action, name, description, force_id_1 = false)
permission = Permission.first(:conditions => ["controller = ? and action = ?", controller, cancan_action])
if not permission
permission = Permission.new
permission.id = 1 if force_id_1
permission.controller = controller
permission.action = cancan_action
permission.name = name
permission.description = description
permission.save
else
permission.name = name
permission.description = description
permission.save
end
end
Однако я получаю эту ошибку:
invalid value for Integer(): "{:conditions=>[\"controller = ? and action = ?\""
Я не могу понять, в чем дело, как только INTEGER является идентификатор.
Но мы не нашли первое разрешение, используя идентификатор ...
Я думаю, что 'Permission.find_by (контроллер: контроллер, действие: cancan_action)' будет производить тот же результат. – moveson