问题标签 [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.
ruby-on-rails - 混合acts_as_tree(祖先gem)、acts_as_list 和默认模型范围
我正在使用祖先 gem在树中构建一些组。同时,我使用acts_as_list 将组保持在排序列表中的同一树级别。给定以下模型:
这非常符合预期,例如,我用来@group.path
在管理界面顶部生成面包屑导航。生成的 SQL 没问题,面包屑按树的深度排序。至少对于开发环境来说是这样。
在生产中,它看起来完全不同:跟踪生成的 SQL 我发现不是祖先的path
生成结果顺序,而是我default_scope
的接管。
所以我修复了我的模型,通过覆盖忽略默认范围path
:
但是,虽然这从我default_scope
的开发中删除了位置范围,但在生产中仍然完全被忽略了。跟踪生产中的 SQL,我没有看到祖先的深度排序,而是从我的default_scope
.
更新:由于我最初对“修补”该path
方法的想法有点愚蠢(敲敲:它不是继承的,它是动态定义的),我尝试了以下方法仍然无济于事:
在开发中调用path
生成的SQL如下:
与之相比,这里是生产中生成的 SQL:
开发使用 SQLite,而生产使用 MySQL——但我认为这不是关键的区别。
ruby-on-rails - 您如何在 Rails 3 中确定 ActiveRecord 关联的范围?
我有一个 Rails 3 项目。Rails 3 带来了 Arel 和重用一个范围来构建另一个范围的能力。我想知道在定义关系(例如“has_many”)时是否有使用范围的方法。
我有具有权限列的记录。我想构建一个将我的权限列考虑在内的 default_scope,以便过滤记录(即使是通过关系访问的记录)。
目前,在 Rails 3 中,default_scope(包括我找到的补丁)不提供传递 proc 的可行方法(我需要后期变量绑定)。是否可以定义一个可以传递命名范围的 has_many ?
重用命名范围的想法如下:
或者隐式编码关系中的命名范围如下所示:
我只是想将 default_scope 与后期绑定一起应用。我更喜欢使用 Arel 方法(如果有的话),但会使用任何可行的选项。
由于我指的是当前用户,因此我不能依赖在最后一刻未评估的条件,例如:
sql - 带有命名范围的 has_many_through 关联中 :uniq => true/Distinct 选项的问题(Rails)
请参阅问题底部的更新。
我不得不对我的应用程序进行一些调整以添加新功能,而我的更改似乎破坏了以前完美运行的 :uniq 选项。
这是设置:
#User.rb
has_many :products, :through => :seasons, :uniq => true
has_many :varieties, :through => :seasons, :uniq => true
has_many :seasons
#product.rb
has_many :seasons
has_many :users, :through => :seasons, :uniq => true
has_many :varieties
#season.rb
belongs_to :product
belongs_to :variety
belongs_to :user
named_scope :by_product_name, :joins => :product, :order => 'products.name'
#variety.rb
belongs_to :product
has_many :seasons
has_many :users, :through => :seasons, :uniq => true
首先,我想向您展示当前正在破坏的视图的先前版本,以便我们有一个基线进行比较。下面的视图是拉起属于用户的产品和品种。在以下两个版本中,我为用户分配了相同的产品/品种,因此日志将查看完全相同的用例。
#user/show
这行得通。它只显示一种产品,然后显示每种产品的品种。在下面的日志中,产品 ID 1 有 3 个关联品种。产品 ID 43 没有。
这是上面代码的日志输出:
好的,所以上面的所有内容都是以前的版本,效果很好。在新版本中,我在名为 的连接表中添加了一些列seasons
,并制作了一堆自定义方法来查询这些列。因此,我对您在上面看到的视图代码进行了以下更改,以便我可以访问seasons
模型上的这些方法:
这是日志输出:
我有两个问题:
(1) :uniq 选项不适用于products
. 同一产品的三个不同版本显示在页面上。
(2) :uniq 选项不适用于varieties
. 我还没有对此设置验证,如果用户两次输入相同的品种,它确实会出现在页面上。在以前的工作版本中,情况并非如此。
我需要的结果是任何给定 ID 仅显示一个产品,并且与该 ID 关联的所有品种与此类唯一产品一起显示。
让我印象深刻的一件事是最近的日志输出中的 sql 调用。它将“计数”添加到不同的调用中。我不确定它为什么这样做,或者它是否可能表明存在问题。我发现这张未解决的灯塔票似乎可能相关,但我不确定它是否是同一个问题:https ://rails.lighthouseapp.com/projects/8994/tickets/2189-count-breaks-sqlite -has_many-through-association-collection-with-named-scope
更新
我认为问题在于named_scope 每个季节都被调用一次。named_scope 中需要有一些东西可以按季节 ID 缩小返回的产品范围。
现在发生的事情是:
user = get me user
seasons = get me user's seasons (say, there are 3 seasons for user)
products = get me the products
products += get me the products
products += get me the products
给我每一个产品
所以发生的事情不是 uniq 正在破坏,而是命名范围上没有分隔符。(我认为)。
我尝试了以下方法,但它抛出了这个异常:odd number list for Hash
想法?
更新#2
好的,现在我在想也许它根本不是命名范围。
在#user/show
中,我只是更改了循环以绕过命名范围:
上面没有使用命名范围,但我仍然得到相同的结果。换句话说,我仍然看到每个产品的所有实例,而不仅仅是一个。
上面创建第一个循环的代码与我在此问题顶部列出的原始代码相同。不同之处在于,这段代码循环通过seasons
命中products
,而我的原始代码循环通过products
. 这种差异是问题所在,但我不知道如何解决它。
另外,我在最初的问题中提到我也无法让品种循环工作。您可以直接在上面的代码中看到注释的行。当循环遍历季节而不是产品时,当 Rails 遇到该品种循环时,它会引发名称错误:
似乎这可能是同一问题的另一个症状?
还有其他想法吗?
ruby-on-rails - 重用 named_scope 来定义另一个 named_scope
我所看到的问题本质
有一天,如果我没记错的话,我看到了一个重用named_scope 来定义另一个named_scope 的例子。像这样的东西(不记得确切的语法,但这正是我的问题):
问题是:如果可能的话,确切的语法是什么?我找不到它,谷歌也没有帮助。
一些解释
为什么我真正想要它,是因为我使用 Searchlogic 来定义一个复杂的搜索,这可能会导致这样的表达式:
但它太长了,不能放在任何地方。因为,据我所知,Searchlogic 只是动态定义了 named_scopes,所以我想在 Card 类上设置一个 named_scope,如下所示:
- 这是我将在我的 named_scope 中使用那个长 Searchlogic 方法的地方。但是,再一次,语法是什么?想不通。
恢复
那么,named_scope 嵌套(我的意思不是链接)实际上可能吗?
mysql - named_scope 的 PGError 语法问题
我有以下 named_scope,它在 MySQL 和 sqlite 中运行良好,但在 Postgres 中运行良好:
然后我打电话:
我得到错误:
PGError:错误:在“结束”第 1 行或附近出现语法错误:... WHERE (start < '2010-03-17 14:03:24.995746' AND end > '201... ^ : SELECT count(*) AS count_all 来自“课程”WHERE(开始 < '2010-03-17 14:03:24.995746' AND end > '2010-03-17 14:03:24.995748' )
我的 google-fu 让我失望了,所以我希望 Stack Overflow 不会。关于如何使该范围对 Postgres 友好的任何想法?谢谢,
德鲁
sql - 如何将此 MySQL 语句转换为 named_scope 方法?
“从用户中选择*,奖励其中(users.id = Awards.user_id)和awards.trophy_id不在(从awards.trophy_id = #{trophy.id}的奖励中选择awards.trophy_id)”
ruby-on-rails - 如何:搜索逻辑和标签
我已经安装了 searchlogic 并添加了 will_paginate 等。
我目前有一个使用acts_as_taggable_on 插件启用标记的产品模型。我想使用 searchlogic 搜索标签。
这是可标记插件页面:http: //github.com/mbleigh/acts-as-taggable-on
每个产品都有一个“tag_list”,我可以使用 Product.tag_list 访问它
或者我可以使用 Product.tags[0] 访问特定标签
我找不到用于搜索的范围,但是使用搜索逻辑。这是我工作表格的一部分。
我已经尝试过 :name_or_description_or_tagged_with_like 和 :name_or_description_or_tags_like 以及 :name_or_description_or_tags_list_like 来尝试让它工作,但我一直有一个错误,提示找不到我尝试过的选项(找不到命名范围)。我想知道如何让这个工作或如何创建我自己的named_scope,这将允许我搜索由可标记插件添加到每个产品的标签。
谢谢!
ruby-on-rails - 将 named_scope 用作匿名范围的一部分时发出警告
我有以下命名范围:
它在脚本/控制台中像这样工作得很好
但是如果我像这样使用它,作为匿名范围的一部分
我在第二行收到警告:
它仍然有效,但是导致警告的原因是什么?我该如何摆脱它?
sql - 为什么这个 Rails 命名范围返回空(未初始化?)对象?
在 Rails 应用程序中,我有一个模型 ,Machine
它包含以下命名范围:
此命名范围在开发模式下工作正常。然而,在生产模式下,它按预期返回了 2 个模型,但模型为空或未初始化;也就是说,返回的是实际对象(不是nil
),但所有字段都是nil
. 例如,在控制台中检查命名范围的返回值时,将返回以下内容:
但是,如您所见,返回的对象的所有字段都设置为nil
.
生产环境和开发环境基本相同。两者都使用 SQLite 数据库。这是为查询生成的 SQL 语句:
任何想法出了什么问题?
ruby-on-rails - ruby on rails 命名范围实现
来自《使用 Rails 进行敏捷 Web 开发》一书
该声明
将导致仅对数据库进行一次查询。
Rails 如何实现这一点?我是 Ruby 的新手,我想知道是否有一个特殊的结构允许这种情况发生。
为了能够像这样链接方法,由 named_scope 生成的函数必须返回它们自己或一个对象,而不是可以进一步限定范围。但是 Ruby 怎么知道这是最后一个函数调用并且它现在应该查询数据库呢?
我问这个是因为上面的语句实际上是查询数据库,而不仅仅是返回由链接产生的 SQL 语句。