问题标签 [default-scope]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
131 浏览

ruby-on-rails - 带有 default_scope 的 rails 3.2.12 中的 ActiveModel::MissingAttributeError

我们希望default_scope灵活地使用页面上显示的列customer index。例如,如果用户不应该看到 customer phone#,那么我们从页面中删除phonedefault_scope希望在页面上保留phone空白。index我们从网上得到了这个想法,正在做一个测试。missing attribute:phone但是选择时有错误phone。这是我们default_scopecustomer模型中的定义:

索引页面:

错误是:

是否可以通过故意不在index(或任何视图页面)中选择它来显示一个空列?如果可能,是否default_scope有合适的工具来实现这一目标?谢谢。

0 投票
2 回答
620 浏览

ruby-on-rails - default_scope 上的访问控制器变量

我的应用程序基于子域。每个经理都有自己的子域,应该只显示他的拍卖。我有:

如果应用程序是使用子域访问的,我有一个 before_filter 执行以下操作:

在我的 Lot 的 default_scope 上,我想做以下事情:

这样,无论我在网站上的哪个位置,我都会显示属于经理拍卖的拍品。

问题是我无法访问模型上的@loaded_manager。这样做的最佳方法是什么?

http://railscasts.com/episodes/388-multitenancy-with-scopes?view=comments解决了这个问题!

0 投票
1 回答
74 浏览

ruby-on-rails - 用于在 rails 中搜索和保存的不同 default_scopes(或比我拥有的更好的实现)?

我有一个带有 2 种类型用户的 Rails 应用程序,经过身份验证和未经身份验证(由数据库中的 email_authenticated:boolean 分隔)。当我创建一个用户时,我希望它未经身份验证,但每次我执行任何功能时,我都想在默认情况下在经过身份验证的列表上执行该功能。我最初尝试通过提供 default_scope 来做到这一点,但发现这会修改保存记录的方式覆盖默认值(例如,在示例中默认值变为 true 而不是 false)

是否有人建议让范围仅适用于搜索,或者以更智能的方式实现我的目标。如果我删除默认范围,我不想每次搜索时都调用 User.authenticated,另一方面,我也不想每次保存时都调用 User.unauthenticated。

0 投票
1 回答
159 浏览

ruby-on-rails - 生产的默认范围,但不在开发中

我有一个模型,我想将结果限制为特定客户的结果,因此客户编号为 1(我的数据库也包含其他客户数据)

所以我有这样的范围:

我希望这个范围( :owner_id => 1 部分)在生产中处于活动状态,但在开发中不处于活动状态,因为我没有该数据并且想使用我拥有的数据测试 ui。

0 投票
2 回答
1166 浏览

ruby-on-rails - 使用带有关联的 Rails 默认范围后无法删除记录

我有桌子emailsusers. 该emails表有两个字段:user_idpublish_id

我使用了这样的默认范围:

由于users表中包含publisherssubscribers,所以我习惯于users_idsubscriberspublish_id关联publishers

我正在使用以下方法获取记录:

但是,我收到以下错误:

有人可以告诉我如何删除此邮件或如何强制删除删除电子邮件吗?

完整的错误信息:-

以下是用户类定义:-

0 投票
8 回答
53200 浏览

ruby-on-rails-4 - Rails 4 默认范围

在我的 Rails 应用程序中有一个默认范围,如下所示:

我现在已经升级到 Rails 4,当然,我收到以下弃用警告“不推荐使用带有哈希的 #scope 或 #default_scope。请使用包含范围的 lambda。”。我已经成功地转换了我的其他范围,但我不知道 default_scope 的语法应该是什么。这不起作用:

0 投票
1 回答
457 浏览

ruby-on-rails - 如何为 has_many 设置 default_scope :通过基于连接表的关联?

我的问题

我如何为用户创建一个 default_scope,以便它限制只有那些在 has_many :through 关联的连接表中拥有当前租户的租户用户记录 (tenants_users.tenant_id == Tenant.current_id) 的用户的可见性?我认为这最终是一个语法问题,但它可能比这更深。

我在做什么

我正在使用Multitenancy with Scopes(需要订阅)作为指南来实施多租户。Ryan 使用 default_scope 根据客户端的当前租户限制可用行。他基本上为所有包含租户特定数据的表添加了一个tenant_id 列,然后在每个模型中包含一个 default_scope:

[Tenant.current_id (a cattr_accessor) 在用户登录时设置(Tenant.current_id = 用户选择的租户的tenant_id)。]

这对我很有用,除了我想要用户和租户的多对多关系(而不是 Railscast 假设的多用户对一租户):一个租户可以有多个用户,我想要用户可以访问多个租户。因此,我的用户表上没有一个tenant_id 列,而是有一个tenants_users 连接表,其中每一行都有一个tenant_id 和user_id。

我正在寻找的结果的不同描述

如果我启动 Rails 控制台并设置:

...然后说...

...我只想查看在tenants_users 表中有一行的用户,例如tenant_id == Tenant.current_id。

如果我说:

然后我想查看所有用户,不管 Tenant.current_id 是什么。

代码

租户.rb

用户.rb

租户_用户.rb

0 投票
3 回答
1526 浏览

ruby-on-rails - 多租户的 RSpec - 为什么这个简单的测试失败了?

我在做什么

我最近在Multitenancy with Scopes(需要订阅)作为指南之后实施了多租户(使用范围) 。注意:我正在使用可怕的“default_scope”来确定租户范围(如 Ryan 的 Railscast 中所示)。一切都在浏览器中运行良好,但我的许多(不是全部)测试都失败了,我不知道为什么。

我从头开始构建身份验证(基于此 Railscast:Authentication from Scratch(修订版) - 需要订阅)并使用 auth_token 实现“记住我”功能(基于此 Railscast:Remember Me & Reset Password)。

我的问题

为什么这个测试失败了,为什么这两种变通方法有效?我已经被难住了几天了,只是想不通。

我认为正在发生的事情

我正在调用 Jobs#create 操作,并且 Job.count减少1 而不是增加1。我认为正在发生的事情是正在创建工作,然后应用程序正在失去“租户”分配(租户正在下降为零),并且测试正在为错误的租户计算工作。

奇怪的是它期待“1”并得到“-1”(而不是“0”),这意味着它正在计数(请注意,在 before 块中已经创建了一个“种子”作业,所以它可能正在计数“ 1" 在调用 #create 之前),调用 create 操作(这应该将计数总共增加 1 到 2),然后失去租户并切换到有 0 个工作的 nil 租户。所以:

  • 计数 1(种子工作)
  • 创建工作
  • 失去租户
  • 在新(可能为零)租户中计算 0 个工作

...导致 Job.count 发生 -1 变化。

您可以在下面看到,我通过在测试中的 Job.count 行中添加“.unscoped”来半确认这一点。这意味着存在预期的工作数量,但这些工作不在应用程序正在测试的租户中。

我不明白的是它是如何失去租户的。

代码

我试图获取我的代码的相关部分,并且我创建了一个专用的单测试规范,以使其尽可能易于剖析。如果我可以做任何其他事情来简化可能的回答者,请告诉我该怎么做!

这是rspec的失败:

如果我添加一些“放置”行来直接查看 current_tenant 是谁并通过检查会话哈希,我会一直看到相同的租户 ID:

产量...

0 投票
0 回答
104 浏览

ruby-on-rails - 使用 has_one 关联时,Rails 4 不尊重 default_scope

我有一个具有默认范围的模型类,像这样

我希望User.first.avatar返回用户创建的第一个附件类型为头像。相反,我得到了用户的第一个附件(无论类型如何)。

我必须手动指定类型才能使其工作:

为什么关联不尊重 default_scope?我应该添加Avatar.all返回预期结果(仅在类型为“头像”的情况下)。

0 投票
1 回答
346 浏览

ruby-on-rails - 多租户应用程序中的acts_as_list - 如何设置范围?

问题

我在多租户应用程序中使用acts_as_list。我使用这个 Railscast 对多租户建模:#388 Multitenancy with Scopes(需要订阅)。

我需要确保我的 around_filter 正常工作,以便租户不会影响其他租户的数据。

由于acts_as_list 忽略default_scope,确定acts_as_list 范围以强制执行多租户的最佳方法是什么?

背景

基本思想是在 application_controller.rb 中使用 around_filter,如下所示:

这样,每次在应用程序中加载页面时,都会设置 current_tenant,我可以使用 default_scope 来限制仅访问 current_tenant 的内容。像这样:

但是acts_as_list 使用Model.unscoped(在本例中为Submission.unscoped),绕过了我的default_scope。

这是我正在研究的特定模型:

我在其他几个地方这样做,但我使用 id 列而不是 for_date,所以acts_as_list 声明如下所示:

效果很好。但是当我用我的提交模型尝试这个,并在acts_as_list范围中包含for_date时,我得到了这个错误:

我将如何添加这样一个明确的类型转换?还是有更好的方法来做到这一点?