首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails Arel连接表

Rails Arel连接表
EN

Stack Overflow用户
提问于 2019-10-01 16:30:04
回答 2查看 106关注 0票数 1

因此,当用户的角色名称与该区域的名称匹配时,我正在尝试筛选,并且我被困在三个表之间的Arel连接上。

用户具有名称、role_id、电子邮件等用户has_many角色。角色表具有id和名称。区域有名字,位置。区域不属于用户。

示例:

  • 约翰史密斯编号: 20,role_id: 15
  • 角色编号:15,名称:太平洋西北
  • 地区编号: 5,名称:太平洋西北

因此,我的想法是用户连接区域,其中区域名称匹配。

到目前为止我所拥有的是:

代码语言:javascript
复制
scope :for_user, lambda { |user|
 if user.super_admin?
  self
 else
  joins(:region).where(
  Region.arel_table[:name].matches(Role.arel_table[:id].eq(User.arel_table[:role_id]))
 )
 end
}

def viewable_by?(user)
 return user.super_admin? || user&.role.name == region.name
end

我在事件控制器中引用for_user和viewable_by

代码语言:javascript
复制
def index
 @events = search_event.paginate(page: params[:page])
end

def search_event
 Event.order(sortable_query)
    .for_user(current_user)
    .includes(:region)
    .advanced_search(
     params[:search],
     params[:region_id]
    )
end

def load_event
 @event = Event.find_by!(id: params[:id])
 raise DeniedError unless @event.viewable_by?(current_user)
end

我认为这可能是一个比赛问题,所以我也尝试了。同样的问题也出现了:没有将符号隐式转换为字符串。

这个想法是,用户有一个分配给他们的角色,并且只能查看那些具有与该角色匹配的名称的事件。

所以,如果约翰·史密斯登录,他只会看到那些太平洋西北地区的事件。

EN

回答 2

Stack Overflow用户

发布于 2019-10-01 17:56:25

我可能还没有完全领会到你的问题,但似乎你应该能够做这样的事情:

代码语言:javascript
复制
Event < ApplicationRecord
  belongs_to :region

  class << self

    def for_user(user)
      return self if user.super_admin?
      joins(:region).where(region: {id: Region.where(name: user.role.name)})
    end

  end
end

这应该返回所有Event,其中event.region_id保存与user's role中的name匹配的任何Regionid

您可以在指定联接表的条件中从文档了解更多信息。

我看到您有一种使用arel_table的方法。我将把这作为一种非arel_table,非lambda,非scope的方法。

此外,我将从我的评论中重申,文档状态:

使用类方法是接受作用域参数的首选方法。

票数 2
EN

Stack Overflow用户

发布于 2019-10-01 17:54:06

在百灵鸟上,我试了一试,结果成功了:

代码语言:javascript
复制
joins(:region).where(
              Region.arel_table[:name].matches("%#{user&.role.name}%")
            )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58188964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档