问题标签 [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 回答
6282 浏览

ruby-on-rails - 带有 :joins 和 :select 的 default_scope

我尝试通过以下方式定义 default_scope:

我从 Rails 得到的是:

当我将其定义为 named_scope 时,一切都很好:

这应该是一个错误还是正确的行为?

我正在使用 Rails 2.3.4。

谢谢!

0 投票
3 回答
226 浏览

ruby-on-rails - 旧版 Rails 中的默认范围

下午所有。

我正在做一个在 Rails 2.1 上编写的项目

在较新的版本中,我们可以使用一种相当酷的方法来创建一个默认范围,如下所示

不升级rails版本,如何实现相同/相似的效果?

0 投票
4 回答
8373 浏览

ruby-on-rails - 在 Rails 中覆盖 default_scope

在我的 Post.rb 模型中,我有default_scope :conditions => {:deleted => 'false'}

但是如果我尝试运行Post.find(:all, :conditions => "deleted='false'"),它不会返回任何东西。就好像 default_scope 优先于一切。

我想要它,这样当我这样做时Post.find()它不会返回已删除的帖子,但我也希望能够在需要时访问它们。在我的查询或 Rails 模型中需要更改哪些内容?

谢谢。

0 投票
3 回答
15424 浏览

ruby-on-rails - rails 3中的default_scope

我知道 named_scope 已更改为 rails 3 中的范围。

如何在 rails 3 中执行 default_scope,我有一个很好的谷歌,但没有找到默认范围。

0 投票
2 回答
1527 浏览

ruby-on-rails - 根据某些标准设置 default_scope

我正在尝试根据 ana ActionController before_filter 确定的某些标准设置默认范围。在控制器中:

ActiveRecord 内部

但这似乎不起作用,调用了 before 过滤器但未设置 default_scope 。您能否告诉我我做错了什么以及如何解决它或建议我其他一些方法来实现它。

0 投票
2 回答
1055 浏览

ruby-on-rails - 使用 has_many 时有没有办法打破 default_scope?

我有一个树状模型,在除一种之外的所有情况下,我都希望将结果范围限定为仅返回根。

使用default_scope似乎是一个很棒的想法,因为与许可证关联的各种模型(大约有 4 个)以及使用 find() 的任何代码都不需要做任何特别的事情。这不是一个好主意的原因是默认范围也适用于has_many,这导致永远找不到孩子。但这has_many唯一需要超出范围的地方,所以就“默认”行为而言,我认为这default_scope是非常合理的。

那么有什么好方法可以解决这个特定问题吗?

这是我不太喜欢的一个,因为它使用 SQL 进行几乎微不足道的查询:

或者,是否有某种方法可以将命名范围应用于模型中的关联?例如,类似于此无意义代码的内容:

我知道我也可以这样做:

但这真的不是很干。Licence.roots.find()老实说,实际上必须通过而不是做每一个查询Licence.find()也不是很干。它只是要求在不使用范围的地方发生错误。

0 投票
2 回答
2555 浏览

ruby-on-rails - Rails 3 中的 default_scope 有问题吗?无方法错误

将此添加到我的Alternative-model 后,我遇到了一个奇怪的错误:

在第一页刷新时,一切正常。在随后的刷新中,我得到

Alternative肯定有written?方法。我正在运行乘客,所以经过

该页面再次工作。对于第一次刷新。但是错误消息再次出现在随后的刷新中。删除default_scope解决了问题(但仅在另一台服务器重新启动后)。

编辑:通过 WEBrick 在 WEBrick 上运行时也存在该错误rails server,因此它未连接到乘客。

编辑: written?Alternative. 尝试访问通过 获得的方法时也会出现该错误has_many,如下所示:

还有其他人default_scope在 Rails 3 中遇到问题吗?或者有解决办法吗?谢谢!

0 投票
2 回答
1766 浏览

ruby-on-rails - 在 Rails 中为 has_many 关联覆盖 named_scope 的最佳方法?

注意:我使用的是 Rails 2.3.8,而不是 3。

我有一个带有 default_scope 的照片模型:

调用 photo_album.photos 会返回所有按位置排序的已发布照片。但是,当在管理面板中循环浏览这些相册以显示每个相册中的照片数量时,结果是错误的:

返回 0,因为没有发布。

我知道有人问过类似的问题,并且答复通常是“使用 with_exclusive_scope 类方法”。据我所知,这完全阻止了标准 Rails 关联的使用 - 基本上导致了这样的结果:

并需要一个类方法,如:

只是为了显示相册中的照片总数。这看起来很疯狂——覆盖默认值不需要放弃 Rails 关联约定。with_exclusive_scope 也不能在实例方法(受保护的方法)中使用 - 这将允许我创建一个名为“all_photos”的 PhotoAlbum 实例方法,以至少保留关联的外观(photo_album.all_photos)。但是不,这是不允许的:(

除了删除在整个站点中被证明非常有用的 default_scopes 之外,是否有人知道覆盖默认范围和维护 Rails 关联语法的方法?

谢谢!

编辑:

我最终添加了一个 PhotoAlbum 实例方法,虽然它不是一个实际的 default_scope 覆盖,但在我的视图中确实使语法更好:

虽然它不完全是一个 AR has_many 关联并且它依赖于纯 SQL,但它是迄今为止我发现的最好的折衷方案。

0 投票
4 回答
1931 浏览

ruby-on-rails - 在某些情况下,default_scope 会中断 (update|delete|destroy)_all

我相信这是 Rails 3 中的一个错误。我希望这里有人可以引导我朝着正确的方向前进。下面发布的代码纯粹是为了说明这个问题。希望这不会混淆这个问题。

鉴于我有一个 Post 模型和一个 Comment 模型。Post has_many Comments 和 Comment belongs_to Post。

在 Post 模型上设置 default_scope,定义 joins() 和 where() 关系。在这种情况下 where() 依赖于 joins()。

通常帖子不会依赖于评论。同样,我只想举一个简单的例子。当 where() 依赖于 joins() 时,这可能是任何情况。

运行以下命令:

产生以下查询,并最终抛出 ActiveRecord::StatementInvalid:

同样,update_all、delete_all、destroy_all 的行为方式相同。当我的应用程序在尝试更新 counter_cache 时抱怨时,我发现了这种行为。最终深入到 update_all。

0 投票
6 回答
9294 浏览

ruby-on-rails - default_scope 和关联

假设我有一个 Post 模型和一个 Comment 模型。使用通用模式,发布 has_many Comments。

如果 Comment 设置了 default_scope:

无论范围如何,如何轻松检索帖子的所有评论?这会产生无效的结果:

这会生成以下查询:

代替:

跑步:

产生:

我理解 unscoped 删除所有现有范围的基本原则,但不应该知道并保持关联范围吗?

提取所有评论的最佳方式是什么?