问题标签 [named-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 投票
6 回答
11329 浏览

ruby-on-rails - 有没有办法将命名范围组合成一个新的命名范围?

我有

我想要

但我更喜欢以干燥的方式来做。我可以通过使用获得相同的效果

但它不是特别可爱。

0 投票
3 回答
5826 浏览

sql - 在 named_scope 中封装 SQL

我想知道是否有办法在 named_scope 中使用“find_by_sql”。我想将自定义 sql 视为 named_scope,以便我可以将其链接到我现有的 named_scopes。这对于优化我经常使用的 sql 片段也很有用。

0 投票
2 回答
15431 浏览

ruby-on-rails - 带有连接的 Rails named_scopes

我正在尝试创建一个使用连接的 named_scope,但虽然生成的 SQL 看起来正确,但结果是垃圾。例如:

(一个剪辑属于一个系列,一个系列属于一个节目,一个节目可以是可见的或不可见的)。

Clip.all 可以:

Clip.visible.all 会:

这看起来没问题。但是生成的剪辑模型数组包含一个 ID 不在数据库中的剪辑 - 它取而代之的是一个节目 ID。我哪里错了?

0 投票
2 回答
1466 浏览

ruby-on-rails - 如何从 ActiveRecord 模型中提取常见的 named_scopes

我已经在多个 ActiveRecord 模型中重用了 named_scope。例如:

提取此代码以在模型之间共享的最佳实践是什么。是否可以将其提取到模块中,或者我应该重新打开 ActiveRecord::Base 类?

0 投票
1 回答
1067 浏览

ruby-on-rails - 在 Active Record 模型 search() 方法中使用 scope_builder 有条件地构建命名范围

我正在使用 Ryan Bates 出色的scope_builder有条件地构建一个新的命名范围,以在 Active Record 模型的 search() 方法中使用。

示例文档显示您可以执行以下操作:

但是,当我在我的模型中包含上述代码的相关版本并调用 search() 并传递了一些选项时,我得到的是 ScopeBuilder::Builder 的一个实例,而不是使用选项执行链式命名范围的结果我已经通过了,这是我所期望的。

我的问题是:如何获得执行 builder(options) 而不是构建器实例的结果?

0 投票
3 回答
2099 浏览

ruby-on-rails - 获取命名范围内元素的 id

在 ruby​​ on rails 中,所有has_many :widgets方法都生成一个object.widgets方法和一个object.widget_ids方法。

后一种方法非常有用,因为它绕过了 ActiveRecord 对象的创建并运行更快的查询。使用该选项可以提高查询速度:select,但是 ruby​​ 在生成对象而不是整数时仍然分配更多的内存。

例如

(结果集为 67353 个对象)

有没有办法在使用 named_scopes 时发生相同的行为?

例如,

我目前在命名范围结果集中获取对象 ID 的方式是:HistoricalSession.recent.map(&:id)。这与上面后一个示例中所做的基本相似,并且显然效率不高。我不想构建整个 HistoricalSession 对象,最终我只需要一个 id 数组。

另一种实现可能是新的 .find 方法。例如,HistoricalSession.recent.find_attributes(:id)。此方法将替换 select 语句以仅选择指定的值,并将缩短 ActiveRecord 对象的创建以仅返回一个数组。

有什么建议么?这可能是一个简单的插件吗?

0 投票
1 回答
1391 浏览

ruby-on-rails - named_scope 中的变量字段名称?

在 Rails 模型中,我试图实现一个基于 start_date 和 end_date 过滤的 named_scope。这很简单。但我将不得不在很多不同的领域多次这样做。

这是自找麻烦吗?如果是这样,为什么(SQL 注入?)并且有另一种方法来实现这一点。

编辑:使用的解决方案

使用 Eggdrop 的思路,我选择了:

现在,我可以将我的 named_scope 重用于我希望在日期范围上过滤的字段,而无需一遍又一遍地重写本质上相同的范围,并将字段名称列入白名单,以避免在代码暴露给用户时对我的列名和棘手的 SQL 注入造成任何混乱将来输入。

0 投票
3 回答
336 浏览

ruby-on-rails - 一个困难的 named_scope 情况

在我的应用程序中,用户可以开始和参与讨论。他们还可以标记讨论;当他们这样做时,会创建一个包含标签名称的标签(如果它不存在的话),并且还会创建一个标签,它会记住哪个用户用什么标签标记了哪个讨论。

所以在讨论模型中,我们有这个:

我正在尝试创建一种简单的方法来从一个用户那里检索讨论中的所有标签。理想情况下,named_scopes 将被明智地用于保持事物的美观和清洁。我认为它应该看起来像这样:

在 Tag 类中编写这个 named_scope 非常困难。它应该是什么样子?我是否需要以某种方式将它与 Taggings 表连接起来?

0 投票
2 回答
160 浏览

ruby-on-rails - 如果我将 named_scope 与 :join 一起使用,它正在创建新对象

免责声明:我最初接触 Ruby on Rails 确实是几年前的事了,现在我重新开始使用它,很多东西对我来说都是新的。其中之一是命名范围。它们看起来很棒,但我没有得到我期望的结果。这是一个例子:

据我了解,做一个

应该与做一个完全相同

但相反,我得到了不同的对象。展示:

所以我的问题是:这个新对象到底是从哪里来的,我如何让 named_scope 给我原来的对象?

0 投票
1 回答
303 浏览

ruby-on-rails - 将带有参数的查找器方法更改为关联

如何将其变成 has_one 关联?

(可能是 has_one + 一个命名的大小范围。)

编辑:来自 Freenode #rubyonrails 上的 AnalogHole 提示,我们可以这样做:

...这相当酷,并且至少使语法更好一些。

但是,这仍然没有我想要的那么好。特别是,它不允许更好的查找链接(这样它在获得所有条件之前不会执行此查找)。

更重要的是,它不允许在 :include 中使用。理想情况下,我想做这样的事情:

...这样我就可以将资产与帖子一起缓存。或者完全缓存它们,真的 - 例如get_cache(user_id){User.find(user_id, :include => :avatar_assets)}将是一个很好的第一关。

这实际上不起作用(self == User),但在精神上是正确的:

(也发布在重构我的代码。)