问题标签 [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 投票
1 回答
794 浏览

ruby-on-rails - 由于缺少 has_one 多态关联,Rails 范围

我有一些记录,而不是被删除,而是通过在多态 record_invalidations 表中创建一个条目而无效。

设置如下所示:

(有多个记录类,因此是多态关系。)

问题:如何创建一个范围,它根据另一个类中没有指向相关类的条目来返回记录。

当前代码不起作用,因为关系指针位于 records_invalidations 表中,而不是 records 表中。

更新 2

record_invalidation 类与表名匹配得很好,我认为问题出在列名上。这是(简化的)架构:

更新 3

我知道为什么会发生第一个错误,所以我删除了该更新。现在我传递了我在 SQL 查询中加入的正确表名,但我有许多参数不匹配。我可以将另一个参数传递给 where 子句吗?

给出:

0 投票
2 回答
1044 浏览

ruby-on-rails - Rails 4关系未排序:带有默认范围的'has_many'关联,'includes'和'order'链接在一起

我正在尝试使用默认范围对模型 QuizCategoryWeight 施加排序顺序。目标是让@possible_answer.quiz_category_weights 按排序顺序返回权重。

更新: 我已经将问题缩小到这样一个事实,即默认范围似乎对我有用,只要它们只有一个“订单”方法,但当“包含”方法与“订单”方法链接时就不行。但是,此链接确实适用于命名范围。

会不会是我的开发环境?或者这可能是 Rails 中的一个错误?

我正在使用Windows,所以也许这就是问题所在。目前在 ruby​​ 2.0.0p645 (2015-04-13) [i386-mingw32] 和 Rails 4.2.4 ...

以下使用 QuizCategoryWeight 上的默认范围似乎不起作用:

使用命名范围,它确实有效。但是,这意味着我必须向表单构建器添加一个参数才能使用集合“f.object.quiz_category_weights.sorted”。

0 投票
3 回答
98 浏览

ruby-on-rails - default_scope 排除记录时如何使用 ActiveRecord::Base.update?

当我的默认范围不包括我要更新的记录时,如何在我的对象上使用更新?

默认范围

播放器控制器

错误

设置播放器

堆栈跟踪

0 投票
1 回答
97 浏览

ruby-on-rails - 空的?使用 default_scope(:order) 在 ActiveRecord 上失败

有时我想检查一个 Person 模型是否有任何组织。足够直截了当;使用@person.organizations.empty?. 但是,再加上我的 default_scope ( default_scope { order(:name) }),我得到了这个错误:

ActiveRecord::StatementInvalid (PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY 表达式必须出现在选择列表 LINE 1: ... WHERE "relationships"."person_id" = $1 ORDER BY "organizat... ^

: SELECT DISTINCT 1 AS one FROM "organizations" INNER JOIN "contracts" ON "organizations"."id" = "contracts"."organization_id" INNER JOIN "relationships" ON "contracts"."id" = "relationships"。 contract_id" WHERE "relationships"."person_id" = $1 ORDER BY "organizations"."name" ASC LIMIT 1):

我正在使用 Postgres DB,我的(缩写)模型设置如下所示:

到目前为止我尝试过的事情:

据说这会让 activerecord 提前看到即将发生的事情(它没有)和

当我将它手动放入控制台时,它解决了这个问题,但对应用程序本身没有帮助。如何强制 ActiveRecord 以empty?不同的方式格式化查询或在我使用时删除订单empty?

编辑:需要明确的是,我完全知道使用@person.organizations.count == 0会起作用,并且可能还有其他一次性解决方案。但我正在寻找一个通用的,所以我不必不断重复自己。

0 投票
1 回答
123 浏览

ruby-on-rails - 我可以根据当前用户为模型设置默认范围吗?

目前我有一个User模型acts as taggable on用来给用户“角色”。所以我会有一个标签,例如Member,,。每个用户都有一个关系。但是,会员应该只能看到他们的报告,版主应该能够看到他们的报告和任何会员的报告,最后管理员应该能够看到所有内容。AdminModeratorReports

目前,我在通过 if 语句访问报告的每个控制器页面上处理此问题,但这似乎是一种糟糕的做法,最终会导致有人看到他们不应该看到的报告。所以这让我想到是否可以对模型的文件设置某种限制以在一个地方处理这个问题。

0 投票
1 回答
708 浏览

ruby-on-rails-4 - 尝试设置 default_scope 但出现“支持在没有块的情况下调用 #default_scope 已被删除”错误

我正在使用 Rails 4.2.3。我有这两个模型

我想在加载“MyObject”时自动加载父关联,但在“default_scope”行出现此错误……</p>

如何调整我的“default_scope”行以自动加载我的父关联?

0 投票
0 回答
96 浏览

ruby-on-rails - 使用“包含”的 ActiveRecord 查询有时会应用 default_scope,有时则不会

我正在尝试对我的用户模型执行 ActiveRecord 查询,该模型用于includes预先加载用户的角色和位置。(一个用户有很多角色并且有很多位置) Location 模型有一个默认范围。这是:

where(:status => [0, 2])

当我使用 执行简单查询时includes,会应用 Location 模型的默认范围。例如,查询:

User.includes(:roles, :locations)

将在 sql 输出中包含以下内容:

SELECT "locations".*, "t0"."user_id" AS ar_association_key_name FROM "locations" INNER JOIN "locations_users" "t0" ON "locations"."id" = "t0"."location_id" WHERE "locations"."status" IN (0, 2)

但是,稍微复杂一点的查询,例如:

User.includes(:roles, :locations).where(roles: {id: 13})

不应用 Location 默认范围。状态为 的1位置将包含在用户返回的位置中。

我注意到第一个查询是用多个SELECT语句执行的,而第二个查询是作为一个SELECT带有许多JOINs 的语句执行的。我怎样才能使它在所有情况下都应用 default_scope ?

我正在使用 Rails 3.2.22。

0 投票
2 回答
464 浏览

ruby-on-rails - 覆盖 default_scope

有人可以帮我找出如何覆盖default_scope.

在我看来,我必须显示所有matches,不仅{ where("match_date >= now()") }需要显示所有匹配项。我有理由使用 default_scope。我是 Rails 的新手。我尝试使用 unscoped,但它没有帮助,或者我没有正确使用它。有什么建议么?谢谢!

控制器

看法

0 投票
2 回答
1720 浏览

ruby-on-rails - 是否可以在 Rails 中有条件的默认范围?

我在 rails 3.2.21,ruby 版本是 2.0

我的要求是为特定模型提供基于角色的条件默认范围。例如

将角色变量视为登录用户的属性

0 投票
1 回答
3094 浏览

ruby-on-rails - 如何向 Rails 范围添加多个条件?

我一直在寻找这个问题,但似乎无法找到答案,尽管我认为如果你比我更熟悉 Rails,这应该是一个很容易解决的问题。我正在尝试将多个 default_scope 条件添加到我的 Product 模型中。我的产品模型文件如下:

我还想补充

使产品索引页面上的新产品采用最新优先的格式。每当我执行以下操作时都会收到语法错误消息:

或者

或者

我知道这可能只是我不理解的语法。如果有人可以就如何解决这个问题给我建议,将不胜感激!谢谢!