ruby-on-rails-3.1 - CanCan 和 accessible_by 报错,无法确定 SQL

标签 ruby-on-rails-3.1 cancan

我需要一些建议。

在我的 Controller 中,我有一个错误: “accessible_by 调用不能与 block ‘can’定义一起使用。无法确定 SQL ...”

组 Controller 代码:

@groups = @q.result.order('name').accessible_by(current_ability,:read).page(params[:page]).per(20)

在 ability.rb 文件中:

can :read, Group do |group|
        group.try(:group_type) == 1 || group.try(:user) == user || user_just_joined(user, group.id)
end

user_just_joined 是一个函数,返回 true 或 false,判断用户是否与该组相关。

是的,我知道我应该以这种方式准备代码,以避免这个错误:

can :read, Group, :group_type => 1
can :read, Group, :user => user
can :read, Group, user_just_joined(user, :id)

//上面的代码应该创建“OR”语句,类似于第一个例子

但是:can :read, Group, user_just_joined(user, :id) 不起作用,:id 值未定义。

在函数中使用“或”语句的最佳解决方案是什么,该函数根据传递的参数返回 true 或 false?

最佳答案

根据文档,这可能会有所帮助... accessible_by 是一个类方法,因此在这种情况下类似于索引操作。

获取记录

block 的条件只能通过 Ruby 执行。如果您使用 accessible_by 获取记录,它将引发异常。要从数据库中获取记录,您需要提供表示条件的 SQL 字符串。 SQL 将进入 WHERE 子句,如果您需要进行连接,请考虑使用子查询或作用域(见下文)。

can :update, Project, ["priority < ?", 3] do |project|
  project.priority < 3
end

如果您正在使用 load_resource 并且不提供此 SQL 参数,则不会为索引操作设置实例变量,因为它们无法转换为数据库查询。

关于ruby-on-rails-3.1 - CanCan 和 accessible_by 报错,无法确定 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9209443/

相关文章:

ruby-on-rails - gmaps4rails 信息窗口在 zurb 基础上显得扭曲

ruby-on-rails - 图像的 Rails 3.1 绝对 URL

ruby-on-rails - 我可以在表单输入集合中通过 CanCan 使用授权吗?

ruby-on-rails - Rails 无法正常工作

ruby-on-rails - 使用 CanCan 通过父关联授权子对象

ruby-on-rails - Rails + CanCan : User should be able to delete own photo, 但不能

ruby-on-rails - rake routes 是否显示了我所有的应用程序可用路线,或者在 ruby​​ on rails 中缺少一些路线?

ruby-on-rails - 在 Rails 3.1 中禁用特定 Controller 操作的日志记录

ruby-on-rails-3.1 - 如何更正has_many/belongs_to与paper_trail关联的版本

用于 Ruby on Rails 的 Java 授权库,如 "CanCan"