首页 > 解决方案 > 当前用户的Rails设置过滤器-加入关联问题

问题描述

我有一个用于表单的过滤器,我只想显示那些电子邮件与当前用户匹配的表单。

涉及的属性:用户的电子邮件、职业的收件人、地区名称

Careers belongs_to :region 我目前正在显示 Region,在我看来以下内容:

-@careers.each do |career|
 th =career.region&.name

因此,逻辑是将 current_user.email 与所有 Careers.recipienct 进行比较,如果存在则仅显示那些代表的区域。

示例是:

Region            | Career       | Recipients
Pacific Northwest | Data Analyst | john@doe.com, jill@excite.com

所以我知道它需要点击我的区域选择,如下所示:

= select_tag :region_id,
  options_from_collection_for_select(sort_region, :id, :name, params[:region_id]),
  include_blank: 'All Regions'

sort_region 目前有:

def sort_region
 Region.where.not(name: ['HQ', 'Canada'].sort_by(&:position)
end

所以我的想法是用类似的方法来处理比较:

def user_region
 if current_user.super_admin?
  return sort_region
 else 
  arr = []
  Career.all.each do |emails|
   arr << emails.recipient
  end
  if arr.include?(current_user.email)
   return BLANK
  end
 end
end

空白是我卡住的地方。我只想显示Career.recipient 与current_user.email 匹配的那些区域。

我为基本上我讨厌的回报写了以下内容

return Region.joins(:career).where("region.name = career.region&.name")

这实际上返回

无法将“区域”加入名为“职业”的关联

我尝试时同样的问题

return Region.joins(:career).where("careers.region_id = region.id")

我应该在这里使用正确的连接关联吗?

编辑:如果我能弄清楚如何通过电子邮件向数组推送第二个值,我想我可以解决退货问题。

所以像:

  arr = []
  Career.all.each do |emails|
    arr << emails.recipient
    arr << emails.region_id
  end
  if arr.include?(current_user.email)
    return region_id
  end

所以这不会像我希望/想要的那样创建一对 [["john@doe.com", 2], ["jane@excite.com", 3]] 而是 ["john@doe.com ", 2, "jane@excite.com", 3]。此外,我无法返回 region_id。所以我只需要访问整数。

也许我应该创建所有项目的哈希然后从那里拉?

另一个编辑:

尝试将条件放在迭代中。

arr = []
Career.all.each do |emails|
 if emails.recipient == current_user.email
  arr << emails.region_id
 end
end

然而,这显示了包含 [1] 的 arr,它不是关联的 region_id。

第三次编辑:

我最近的尝试是查看加入,我只需拉出那些职业收件人等于 current_user.email 的区域。

Region.find(:all, joins: ' JOIN regions ON careers.region_id', conditions: "#{current_user.email} = careers.recipient")

这导致找不到您要查找的区域。

标签: ruby-on-rails

解决方案


赢得胜利的 Arel_table

Region.joins(:careers).where(Career.arel_table[:recipient].matches("%#{current_user.email}%"))

推荐阅读