gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:46:30 24 4
gpt4 key购买 nike

我需要一些建议。

在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com