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

ruby-on-rails - 带有连接的嵌套命名范围(爆炸性错误)

所以我有一个 ActiveRecord 类,它有几个不同的命名范围,包括连接参数。在运行报告时,我碰巧遇到了一个在另一个内部被调用的情况:

我的问题在第 3 行——我收到一个运行时错误,显示出于某种原因,在运行第二个查询时,它正在维护外部查询的连接范围。真的我需要它自己单独运行,而不与外部查询共享上下文。有什么想法或想法吗?

(我应该提到这个问题是一个“模糊列”错误,因为有一个表是从两个查询中加入的)

0 投票
1 回答
470 浏览

ruby-on-rails - 根据 current_user 动态设置 named_scope

我不断收到以下错误:

当你没想到时,你有一个 nil 对象!您可能期望有一个 Array 的实例。评估 nil.size 时发生错误

根据当前用户,当他们导航到一个页面时,我想将他们限制为他们可以根据他们的网站看到的内容。问题是站点和用户表之间没有直接关联。一个联系人拥有一个用户(用户信息存储在 current_user 变量中)。一个网站有很多联系人。还有一个站点 has_many students,其中学生表的外键为 site_id。因此学生和站点之间存在链接,因此当当前用户导航到学生页面时,他们只能看到与他们来自同一站点的学生。我可以通过在 named_scope 中硬编码一个数字来仅显示 current_user 站点的学生来做到这一点。但是不同的用户将属于不同的站点,因此当登录时,他们关联的站点会发生变化。这就是问题所在 - 在 named_scope 中动态设置该值。这就是我所拥有的:

学生控制器

学生模型

感谢您的任何建议。

表之间的关系:

用户:contact_id 联系人:主键、contactable_id、contactable_type 站点:主键 学生:site_id

用户模型belongs_to :contact

联系模型 has_one :user belongs_to :contactable, :polymorphic => true, :dependent => :destroy

站点模型 has_many :contacts, :as => :contactable has_many :students

学生模型 belongs_to :site

这成功地按站点限制学生: StudentsController def index_scoper if current_user.role_id == 8 super.site_staff_limit else super.with_state.with_site end end

学生模型 named_scope :site_staff_limit, :conditions => {:site_id => 1}

问题是不同的用户将属于不同的站点,因此他们只能访问他们所属站点的学生记录。我很难使以上的 named_scope 足够动态以完成此操作。

0 投票
4 回答
3128 浏览

ruby-on-rails - 使用“其他”方法获取关联对象时,我可以访问 named_scope 中父对象的 id 吗?

假设您有两个模型:articlescomments.

您知道您可以获取相关文章的相关评论,如下所示:

有没有办法article_id在named_scope中显式访问(123)?

我需要这个用于连接另一个表的复杂 named_scope。基本上,named_scope 将取决于从关联的父对象调用是否有意义(article.comments.my_named_scope不是 Comments.my_named_scope)。

我不想将 id 作为named_scope 的参数传递。因此,我不想将 传递article_id给命名范围... lambda { |article| ...}并使用 访问 id "... #{article.id} ...",而是想以某种方式访问​​该article_id方法others使用的 this ,这是我从has_many关联中获得的。

0 投票
1 回答
777 浏览

ruby-on-rails - 调用命名范围的自定义 ActiveRecord 查找器?

我有一个自定义查找器定义如下:

其中 search_by_date 和 search_by_text 是命名范围,eager 是一个预先加载的命名范围,定义为:

该关联是通过 HMT (has_many :through) 设置的:

问题是如果查找器是通过 ContainerDepot 的关联嵌套调用的,它会失败并返回 ActiveRecord::Statement::Invalid,表示该表已被多次指定。

我可以通过将整个自定义查找器复制为关联扩展来纠正它:

虽然它不是很干,并且引入了非常不必要且可能有问题的冗余,因为必须不时更改自定义查找器以适应额外的搜索逻辑。

关于如何做得更好的任何想法?

0 投票
2 回答
4066 浏览

ruby-on-rails - Rails Workflow Gem - 将事件元编程到 named_scopes?

我正在使用http://github.com/geekq/workflow来提供状态机。我使用 ActiveRecord 来保存状态,这意味着我在模型中有一个“workflow_state”属性。我想我希望状态机中的每个事件都有一个 named_scope,所以我可以找到给定状态的所有对象。例如,假设一个非常简单的状态机:

我想要每个州的命名范围。但是,这不是 DRY ......我想要结束的是这样的:

但是有几行不依赖于当前的状态列表。

我可以看到 Model#workflow_spec.states.keys 给了我每个状态。但我认为我需要的是一个奇怪的 lambda,其中作用域的名称是一个变量。我不知道该怎么做。完全没有。盯着这个看了好几个小时并玩了 irb,但我认为有一些关于元编程的知识我只是没有。请帮忙!

下面的 Lucas 给出了答案——但我们还需要将符号更改为字符串:

0 投票
2 回答
368 浏览

ruby-on-rails - Keeping named_scope Extensions DRY

In Rails, you can add a block after a named_scope for additional, context-sensitive methods like so:

In this example, the activate method is being defined not on the User class, but on the ActiveRecord::NamedScope::Scope object.

I have a series of three scopes that need to have identical method definitions. In the interests of not repeating code, how would I abstract that block such that I could define it once and pass it to each named_scope?

0 投票
1 回答
1081 浏览

sql - 如何使复杂的命名范围与关联和其他命名范围 [rails] 配合使用

我有以下命名范围

对这个 named_scope 的单个调用就像一个魅力,但是当我试图将几个命名范围链接在一起,或者通过一个关联范围访问这个 named_scope 时,它​​会爆炸。我认为,select 语句和自定义 from 子句是问题所在。也许有人知道如何重写这个 named_scope 以允许链接和限定槽关联?

编辑:

多亏了 Shtéf,它正在工作。

这使我现在可以链接范围并通过关联访问它。

轨道生成的双重 where 条件可能只是一个装饰性的小问题(在开始和结束时:

0 投票
2 回答
1353 浏览

ruby-on-rails - 聚合条件 has_many rails 关联

我不确定这是否可行甚至更可取

但我想建立一个 has_many 关系或有条件的 named_scope 类型关系,以减轻我对一个简单关系而不是两个的痛苦。

目前我有两个模型,它们基本上包含相同的信息,并且通过相同的 key room_id 属于相同的模型房间,但以两种不同的方式保存数据。一个包含特定日期的特定信息,第二个包含一周中几天的通用费率。主要障碍是,Availables 可能根本不包含特定记录的信息,在这种情况下,它需要根据 room_rates 来获取平均价格,而不是给定日期的具体价格。

任何指示或建议?谢谢

可用的

房屋价格

或者可能是 finder_sql 方法?如:

但它也需要通过加入 room_rates 来填补不存在的 bookdates 的缺失记录

0 投票
1 回答
210 浏览

ruby-on-rails - Ruby on Rails:是否可以:包括圆形连接表的另一条腿?

我正在开发一个模拟用户之间友谊的应用程序。

当两个用户成为朋友时,会创建友谊类的两个实例,一个用于友谊的每个方向。这是必要的,因为可以在每个方向上设置不同的权限,也为了便于查找,所以我们总是按 user_id 进行搜索,而无需创建第二个索引并且需要加倍搜索。

是否有可能使用 find 或命名范围来拉取朋友以及反友谊?我想这样做是因为我允许用户编辑存储在他们自己的友谊分支中的友谊权限,因此当我向用户显示朋友的信息时,我需要检查对面的分支以查看如何设置权限。(顺便说一句,这似乎是一种合乎逻辑的做事方式吗?要么存储到对面,要么在展示前必须咨询对面,这两种方式都令人不快。)

我已经设法编写了一批完成这项工作的 SQL:

该函数返回用户的所有朋友姓名和 ID,以及权限。但是,这似乎并不理想,这意味着我必须通过调用friend.permissions 来访问权限,其中权限实际上不是朋友的成员,而是由find_by_sql 合并为一个属性。总而言之,我真的更愿意使用 named_scope 或 find 调用来执行此操作,但不幸的是,我使用该方法所做的每一次尝试都导致了错误,因为 Rails 因加入相同的 Friendship 连接表而窒息查询两次。

0 投票
3 回答
2861 浏览

ruby-on-rails - Ruby on Rails:嵌套命名范围

有没有办法将不同模型的命名范围相互嵌套?

例子:

有什么好方法可以让我找到一家公司,同时包括这样的员工和配偶:
Company.with_employees.with_spouse.find(1)
或者我是否有必要在 Company 中定义另一个 named_scope:
:with_employees_and_spouse, :include => {:employees => :spouse}

在这个人为的例子中,它并不算太糟糕,但是我的应用程序中的嵌套要深得多,如果我不必添加 un-DRY 代码来重新定义嵌套的每个级别的包含,我会喜欢它。