私は権限が含まれている私のRailsアプリでは、次の表を持っている中で)(整数の無効な値を取得しますCanCanCan
のロール/ユーザーに対して使用できることはレール
これは、だから、アイデアは、それはすべてのコントローラとアクションをループし、その後、DBを追加または更新するためのコールwrite_permission
を呼び出すことである私の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
にbuild
方法を押すことで達成されます。
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がIDですと、私は、問題が何であるかを理解することはできません。
しかし、我々はIDを使用して最初の許可を見つけていない...
私は 'Permission.find_by(コントローラ:コントローラ、アクション:cancan_actionが)だと思う'同じ結果を生成します。 – moveson