问题标签 [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.
ruby-on-rails - 带有 default_scope 的 rails 3.2.12 中的 ActiveModel::MissingAttributeError
我们希望default_scope
灵活地使用页面上显示的列customer index
。例如,如果用户不应该看到 customer phone#
,那么我们从页面中删除phone
并default_scope
希望在页面上保留phone
空白。index
我们从网上得到了这个想法,正在做一个测试。missing attribute:phone
但是选择时有错误phone
。这是我们default_scope
在customer
模型中的定义:
索引页面:
错误是:
是否可以通过故意不在index
(或任何视图页面)中选择它来显示一个空列?如果可能,是否default_scope
有合适的工具来实现这一目标?谢谢。
ruby-on-rails - default_scope 上的访问控制器变量
我的应用程序基于子域。每个经理都有自己的子域,应该只显示他的拍卖。我有:
如果应用程序是使用子域访问的,我有一个 before_filter 执行以下操作:
在我的 Lot 的 default_scope 上,我想做以下事情:
这样,无论我在网站上的哪个位置,我都会显示属于经理拍卖的拍品。
问题是我无法访问模型上的@loaded_manager。这样做的最佳方法是什么?
http://railscasts.com/episodes/388-multitenancy-with-scopes?view=comments解决了这个问题!
ruby-on-rails - 用于在 rails 中搜索和保存的不同 default_scopes(或比我拥有的更好的实现)?
我有一个带有 2 种类型用户的 Rails 应用程序,经过身份验证和未经身份验证(由数据库中的 email_authenticated:boolean 分隔)。当我创建一个用户时,我希望它未经身份验证,但每次我执行任何功能时,我都想在默认情况下在经过身份验证的列表上执行该功能。我最初尝试通过提供 default_scope 来做到这一点,但发现这会修改保存记录的方式覆盖默认值(例如,在示例中默认值变为 true 而不是 false)
是否有人建议让范围仅适用于搜索,或者以更智能的方式实现我的目标。如果我删除默认范围,我不想每次搜索时都调用 User.authenticated,另一方面,我也不想每次保存时都调用 User.unauthenticated。
ruby-on-rails - 生产的默认范围,但不在开发中
我有一个模型,我想将结果限制为特定客户的结果,因此客户编号为 1(我的数据库也包含其他客户数据)
所以我有这样的范围:
我希望这个范围( :owner_id => 1 部分)在生产中处于活动状态,但在开发中不处于活动状态,因为我没有该数据并且想使用我拥有的数据测试 ui。
ruby-on-rails - 使用带有关联的 Rails 默认范围后无法删除记录
我有桌子emails
和users
. 该emails
表有两个字段:user_id
和publish_id
。
我使用了这样的默认范围:
由于users
表中包含publishers
和subscribers
,所以我习惯于users_id
与subscribers
和publish_id
关联publishers
。
我正在使用以下方法获取记录:
但是,我收到以下错误:
有人可以告诉我如何删除此邮件或如何强制删除删除电子邮件吗?
完整的错误信息:-
以下是用户类定义:-
ruby-on-rails-4 - Rails 4 默认范围
在我的 Rails 应用程序中有一个默认范围,如下所示:
我现在已经升级到 Rails 4,当然,我收到以下弃用警告“不推荐使用带有哈希的 #scope 或 #default_scope。请使用包含范围的 lambda。”。我已经成功地转换了我的其他范围,但我不知道 default_scope 的语法应该是什么。这不起作用:
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
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:
产量...
ruby-on-rails - 使用 has_one 关联时,Rails 4 不尊重 default_scope
我有一个具有默认范围的模型类,像这样
我希望User.first.avatar
返回用户创建的第一个附件类型为头像。相反,我得到了用户的第一个附件(无论类型如何)。
我必须手动指定类型才能使其工作:
为什么关联不尊重 default_scope?我应该添加Avatar.all
返回预期结果(仅在类型为“头像”的情况下)。
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时,我得到了这个错误:
我将如何添加这样一个明确的类型转换?还是有更好的方法来做到这一点?