Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >rails 5算法搜索-按用户状态筛选结果

rails 5算法搜索-按用户状态筛选结果
EN

Stack Overflow用户
提问于 2018-09-28 04:33:47
回答 2查看 372关注 0票数 0

我试图过滤搜索结果显示使用藻类宝石,这取决于当前用户是否携带‘管理’状态。

所有用户都可以创建客户,但是“admin”用户可以访问所有客户,而不管这些客户是否由该用户创建。我还在为我的“用户”模型使用devise。

客户控制器:

代码语言:javascript
运行
AI代码解释
复制
def index
  if current_user.admin
    @customers = Customer.all.order(id: :desc).paginate(:page => params[:page], :per_page => 4)
  else
    @customers = Customer.where(user: current_user).order(id: :desc).paginate(:page => params[:page], :per_page => 4)
  end
end

我正在使用algolia宝石搜索customers#index中的客户。

搜索JS:

代码语言:javascript
运行
AI代码解释
复制
<!-- Algolia search JS -->
<script>
  var client = algoliasearch('x', 'x');
  var index = client.initIndex('Customer');
  //initialize autocomplete on search input (ID selector must match)
  autocomplete('#aa-search-input',
{ hint: false }, {
  source: autocomplete.sources.hits(index, {hitsPerPage: 5}),
  //value to be displayed in input control after user's suggestion selection
  displayKey: 'name',
  //hash of templates used when rendering dataset
  templates: {
      //'suggestion' templating function used to render a single suggestion
      suggestion: function(suggestion) {
        return `<span>${suggestion.first_name.value}"</span>` +;
      }
    }
  });
</script>

我需要做的是过滤自动完成建议,这取决于登录用户是否是“admin”用户。这只需要过滤该特定会话的索引,以便多个同时登录的用户不会影响其他用户可用的客户索引。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-27 02:59:55

解决了!解决方案如下:我在“客户”索引中创建了“user_id”记录:

Customer.rb

代码语言:javascript
运行
AI代码解释
复制
attribute :user_id do
  user.id if user
end

然后,我使用SrcParams.filter根据user_id过滤结果:

JS文件

代码语言:javascript
运行
AI代码解释
复制
var client = algoliasearch('x', 'x');
var index = client.initIndex('Customer');
let admin = document.getElementById("admin-field").innerText; // returns "true" for admins
let userId = parseInt(document.getElementById("id-field").innerText); // returns the integer value of the user's id

var srcParams = { hitsPerPage: 5}

// conditionally set filter based on admin
if (admin != "true") {
  srcParams.filters = `user_id=${userId}`;
}

autocomplete('#aa-search-input', {
  hint: false
}, {
  // use the srcParams
  source: autocomplete.sources.hits(index, srcParams),
   displayKey: 'name',
  templates: {
    suggestion: function(suggestion) {
    console.log(srcParams);
    return  `<span>${suggestion.first_name.value}"</span>` ;
    }
  }
});
票数 0
EN

Stack Overflow用户

发布于 2018-09-28 10:08:45

从设计上看,Algolia不是一个关系数据库。

它不知道是哪个user has_many customers,还是一个customer belongs_to user。它也不知道设计和用户是管理员。

要在Algolia中复制这种关系,您必须创建一个将关系保存在属性中的“平面对象”。

例如,您的“客户”索引可能有一个属性列表中可以查看它们的记录。您可以将其命名为viewable_byuser_ids,任何您想要的(如果您没有“用户”索引,那么这些可以是数据库中的id,不管是什么都行):

代码语言:javascript
运行
AI代码解释
复制
// sample Customer record in Algolia
{
    "name": "Ricky Bobby",
    "viewable_by": [1, 55, 278]
}

接下来,我将依赖您从Rails传递您的current_user.admin (true/false)和用户id,以便您可以在JS条件中引用它。

然后,在“自动完成”中,创建一个条件参数集。如果current_user.adminfalse,那么在用户id上筛选

代码语言:javascript
运行
AI代码解释
复制
<!-- Algolia search JS -->
<
script >
  var client = algoliasearch('BFBCTI275G', '5818cd87afb6c0ef5e4d5ec4ed6580d0');
var index = client.initIndex('Customer');

// create variable
var srcParams = {
  hitsPerPage: 5
}

// conditionally set filter based on admin
// your job to get admin boolean and user id into JS
if (!current_user.admin) {
  srcParams.filters = 'viewable_by: current_user.id';
}

autocomplete('#aa-search-input', {
  hint: false
}, {
  // use the srcParams
  source: autocomplete.sources.hits(index, srcParams),
  displayKey: 'name',
  templates: {
    suggestion: function(suggestion) {
      return `<span>${suggestion.first_name.value}"</span>` + ;
    }
  }
}); <
/script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52555454

复制
相关文章
你知道MVC,MVP和MVVM之间的故事吗?
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
用户2458785
2018/08/29
6640
你知道MVC,MVP和MVVM之间的故事吗?
嘉年华专访 | 我有故事,你有酒吗?
潘娟,京东金融高级DBA,主要负责京东金融生产数据库运维及数据库平台、中间件开发工作。多次参与京东金融6.18、11.11大促活动的护航工作。曾负责京东金融数据库自动化平台设计与开发项目,现专注于Sharding-Sphere分布式数据库中间件开发。乐于在数据库、自动化、分布式、中间件等相关领域进行学习和探索。
数据和云
2018/12/05
1.1K0
【敏捷实践】故事点估算,这真的是问题吗?
用户故事的估算总是不准确的,这是估算的第一要义。正因为此,我们才不能在故事估算上耗费太多时间。估算不应该由个人来进行,团队的Planning Game不可缺少。在估算用户故事时,不应该估算时间,而应该估算用户故事的规模。同时,在团队进行估算时,团队应对“Done”的定义达成一致。 我把这称为用户故事估算的四要素。——然而,即便你掌握了估算的要素与原则,掌握了正确的估算方法,就一定能解决故事估算的问题么? “故事的估算是按照时间来的,这是一个大问题!”我的一名咨询客户有些心急火燎,迫不及待想要我帮助她解决这个
张逸
2018/03/07
1.4K0
同事有话说 | 跨职能团队是必须的吗?
实际上,跨职能团队是由多个来自不同职能领域的人员组成的。但跨职能团队最大的一个特点是团队内的成员不仅来自多个职能领域,还可以扮演多个角色。也就是说,跨职能团队内部就可以协调解决职能空缺、时间紧张、项目进展推进慢等问题。
敏捷开发
2021/07/26
7270
柔性数组和环形队列之间的故事
之前的文章,讲解了柔性数组,有很多人留言,提到一些问题。刚好,之前发关于环形队列的文章有些问题,这次刚好拿出来一起说一下,并用柔性数组实现一个环形队列。
C语言与CPP编程
2021/05/18
5620
柔性数组和环形队列之间的故事
吃惊吗?原来这才是大数据的大问题!
许多公司已经在积极使用大数据,只是它们没有称之为大数据罢了。虽然“大数据”一词有诸多争议,可是这项技术还是变得对公司业务来说必不可少。 据Dresner咨询服务公司的一项新调查显示,结果发现,没有人知
小莹莹
2018/04/23
8090
吃惊吗?原来这才是大数据的大问题!
敏捷里的故事点 Story point
故事点是敏捷项目管理和开发中的一种抽象的度量单位,用于估计实现一个或多个用户故事的复杂度,它是对工作量的一种描述方式。一个故事点就是一个数字,透过这个数字告诉整个团队用户故事的复杂度。复杂度包括功能的难易程度、风险和花多大的功夫。
PM吃瓜
2023/03/02
1.7K0
敏捷里的故事点 Story point
你的企业会讲故事吗?
企业文化比较虚,需要深入其中才能感受到。所以对外人或者刚刚加入团队的新人来说,就会有个问题,如何让他们快速感受到公司的企业文化?答案就是通过故事。
石云升
2022/08/25
2360
有云:RemixIcon和它背后的故事
RemixIcon 是一套简洁开放的矢量图标库,该图标库在 GitHub 上获得了 3K个Star,身边不少同事朋友对它赞赏有加,本期「有云:」邀请到了RemixIcon的作者 - 萧醇,聊聊作者本人对图标库的看法。 小编:先和大家简单介绍一下 RemixIcon 吧 萧醇: RemixIcon 是之前业余时间维护的 Side Project,是一套面向设计师和开发者的矢量图标库。 目前由个人独立绘制完成,包含 2200 多枚图标,其简洁中性的设计风格可适用于大多数行业和用户群体的互联网产品,当然也可
腾讯云设计中心
2022/05/05
1.2K0
有云:RemixIcon和它背后的故事
有奖活动 | 企点和我的故事征文
智能大数据时代,企业如何利用腾讯企点产品完成自身的数字化转型升级?如何全面覆盖全渠道,更好地连接与沟通客户?如何基于企点功能更精准地触达客户?如何解决实际工作中大大小小的痛点以及难题? 即日起,腾讯企点面向广大企业客户,征集“企点和我的故事”。可以是使用企点工作的小分享;可以是独家的企点使用技能经验;可以是企点给你带来了某种改变的小故事。不论是工作中的小细节,还是企业长远的升级转型,只要是你与企点的故事,我们都期待万分! 腾讯企点愿携手大家一“企”成长! 活动日期:11月29日~12月30日 参与方式
腾讯企点
2020/06/10
7060
不同等级SSL证书之间有什么差别你知道吗?
根据审查验证的级别不同,SSL证书的等级也各不相同,目前业界最高验证级别的SSL证书为 Class 4级别的EV SSL证书。本文给大家介绍如何查看SSL证书等级以及不同等级SSL证书之间的区别。
合信ssl证书
2019/07/08
2.2K0
【比特熊故事汇】2月MVP英雄故事|有爱的开源
比特熊:2月份的直播的日子2月22日很特殊,还恰好是个星期二,这个日子真的爱意满满。我在这个特别有爱的日子请到了热爱开源也和本熊一样喜欢电影的两位嘉宾——陈阳、张晋涛!
Jintao Zhang
2022/03/30
4220
【比特熊故事汇】2月MVP英雄故事|有爱的开源
拍摄有故事的品牌--SNG影像系统
在SNG(腾讯社交网络事业群)品牌系统语言体系里,品牌影像承担了重要的一部分——直观传达受众,统一影像风格语言显得尤为重要。以往的设计师通过各式各样的方式找来图片,而在整个项目里,我们尝试塑造整体影像的风格,并且在大统一的前提下,保留属于单个品牌的特性,不断探索提升品牌质感从而打动受众的方式。 对品牌来说,影像风格意味着什么 以往在传统行业中,品牌作为产品的精神象征,创造了同类产品之间的差异特征。在互联网行业这一原则同样适用。品牌往往能产生一种超越其功能文化附加值,其中包含交流方式、生活态度和消费理念。当这
腾讯ISUX
2018/06/29
9690
扪心自问,小团队真的有必要引入微服务吗?
点击上方蓝色字体,选择“设为星标” 回复”学习资料“获取学习宝典 单体应用时代 接口定义 持续集成(CI) 微服务时代 服务拆分原则 框架选择 架构改造 自动化部署 链路跟踪 运维监控 容器化时代 架构改造 Spring Cloud与k8s的融合 CI的改造 小结 微服务是否适合小团队是个见仁见智的问题。 回归现象看本质,随着业务复杂度的提高,单体应用越来越庞大,就好像一个类的代码行越来越多,分而治之,切成多个类应该是更好的解决方法,所以一个庞大的单体应用分出多个小应用也更符合这种分治的思想。 当然微服
猿天地
2022/04/22
3K0
扪心自问,小团队真的有必要引入微服务吗?
安全团队和云计算团队之间更好协作的6个技巧
良好的沟通、对各个团队目标的相互理解以及适当的流程和基础设施,可以确保云计算团队与安全团队之间建立有效的协作关系。
静一
2021/05/08
5310
安全团队和云计算团队之间更好协作的6个技巧
零点击帐户接管的故事
初始侦察: 像往常一样,我从子域发现开始并开始探索它。我对这个目标更感兴趣,因为范围是一个通配符:*.target.com。在我的子域扫描过程中,我没有遇到任何不寻常或有趣的子域。 这就是我开始寻找主
Khan安全团队
2022/01/02
5570
维护之夜,说点故事和经验
人内心的默契就是这样,今天要写的标题和几年前一模一样,干脆在原来的基础上做一些补充。
jeanron100
2021/04/23
4150
你们是敏捷团队吗?
最近常看到有些人说他们是敏捷团队,但仔细了解一下他们的工作方式和环境,确实不敢恭维为敏捷团队。 我觉得考量是否为敏捷团队可以问一下几个问题,如果你都能回答的话,我觉得基本应该是敏捷的: 你知道你们每个团队成员昨天在做什么吗?明天将会做什么?他们有什么问题吗? 你知道这个迭代的目标(即交付物)是什么吗? 你们现在的进度怎么样,能按时交付吗?(burndown chart会告诉你) 你每天的工作会被打搅到吗?有人给你安排新任务还是你自己主动选取新任务,在你任务完成后。 你能很随意的表达你对某个工作的看法吗?比方
麦克-堂
2018/04/12
1K0
你们是敏捷团队吗?
Python对象之间的比较,你Ok吗?
Python中对象之间的比较,可以用 ==,也可以用 is. 在实际使用时,该如何选用。
double
2019/10/24
2.1K0
星球大战与 Python 之间不得不说的故事
摘要: 阔别十年时光,全球瞩目的第七部星球大战电影《原力觉醒》于2016年1月9日在国内上映。它将重新燃起那段神秘的太空岁月与具有原力的宇宙时光。但是,星球大战和 Python 编程语言又有什么关系呢
CDA数据分析师
2018/02/05
1.2K0
星球大战与 Python 之间不得不说的故事

相似问题

SVN标签不是有很大问题吗?

20

故事点可以用来描述由几个团队估计的几个项目的大小吗?

20

用户故事应该分配给团队成员吗?

40

两个不同的项目中的一个故事点之间有什么关系吗?

40

用户故事可以有子用户故事吗?

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档