问题标签 [finder-sql]

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 投票
4 回答
3720 浏览

ruby-on-rails - 如何将字符串传递给 has_many :finder_sql 参数?

在我的应用程序中,用户 has_many 票。不幸的是,tickets 表没有 user_id:它有一个 user_login(它是一个遗留数据库)。总有一天我会改变它,但现在这个改变会产生太多的影响。

那么如何通过登录列建立“user has_many :tickets”关联呢?

我尝试了以下finder_sql,但它不起作用。

我收到一个奇怪的错误:

我还尝试了这个 finder_sql (在登录名周围加上双引号):

但它以同样的方式失败(无论如何,如果它有效,它将容易受到 sql 注入的影响)。

在一个测试数据库中,我在门票表中添加了一个 user_id 列,并尝试了这个 finder_sql:

现在这工作正常。显然,我的问题与我尝试使用的用户列是字符串而不是 id 的事实有关。

我在网上搜索了很长时间......但找不到任何线索。

我希望能够将任何参数传递给 finder_sql,并编写如下内容:

编辑:我不能使用 has_many 关联的 :foreign_key 参数,因为我的 users 表确实有一个 id 主键列,在应用程序的其他地方使用。

编辑#2:显然我没有足够彻底地阅读文档:has_many 关联可以采用 :primary_key 参数来指定哪一列是本地主键(默认 id)。谢谢丹尼尔让我大开眼界!我想它回答了我原来的问题:

但我仍然很想知道如何使 has_many :tickets_since_subscription 关联工作。

0 投票
2 回答
2219 浏览

sql - Rails find_by_sql - 如何运行通用查询

我需要执行此查询以找出 MySQL 将用于特定表的下一个 auto_increment 值。

如何调用这个特定的查询?这适用于我调用它并返回包含模型对象的大小为 1 的数组的任何模型。编辑:该对象包含一个名为 attributes 的散列,其中包含所需的 auto_increment 值。

还有其他方法可以运行此类通用查询吗?想知道改变使用 find_by_sql 的整个方法是否也可以解决原始问题。

0 投票
4 回答
6385 浏览

ruby-on-rails - Rails3:如何将默认条件设置为 has_many

我有盒子和球。球在盒子里。球可以是红色和绿色。

我只想用绿球设置 has_many 。我知道 finder_sql 方法存在,但我不知道如何通过范围进行设置。

我希望以下示例是等效的:

0 投票
3 回答
2310 浏览

ruby-on-rails - finder_sql 不使用 Rails 解析字符串

我的问题是我使用的查询finder_sql在移交给 PostgreSQL 之前没有正确解析,导致数据库语法错误。

为了说明问题,我刚刚使用了这里的示例代码:

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

我只是更改class_name为,"User"因为我没有人物模型,但这在这里无关紧要。

当我使用它时,我收到以下错误:

如您所见#{id},它不会被对象的 id 替换,这会引发 PostgreSQL 错误。

环境

  • 导轨 3.1
  • 转速
  • PostgreSQL 9.1
  • Ubuntu 11.10
  • Ruby 1.9.2p290(2011-07-09 修订版 32553)[x86_64-linux]
0 投票
1 回答
236 浏览

activerecord - 如何使用 ActiveRecord 将 STI 表中的不同类组合成一个结果集?

我们正在构建一个创建类似于 Facebook 的群组页面的群组页面的应用程序。有人可以在页面上发帖,并且该帖子可以有回复。由于它们具有非常相似的属性,因此帖子和回复被合并到同一个 STI 表中

我希望能够得到page.posts_and_replies

为了找到页面的“最喜欢的帖子或回复”之类的内容,我们必须将帖子和回复结合起来,以便我们可以获得结果集,例如:

将帖子和回复放在一起很棘手

posts_and_replies尽管我们通常需要基于单个连接查询它们,但要作为单个结果集进行排序:

我们不能这样做,因为page_id只存在于posts. “回复”仅通过他们所属的帖子引用该页面。所以这个加入给了我们帖子而不是回复。


可能的解决方案:

对数据进行非规范化...

我们可以将其复制page_id到回复和帖子上,但如果可能的话,我真的很想避免这样做,因为非规范化的数据往往会以泪水告终。

使用自定义finder_sql

我们可以使用自定义查找器 sql 来分别获取帖子和回复,然后将它们组合起来:

自定义 finder_sql 有效,但不适用于关联扩展

上面的 finder_sql 实际上确实有效,但是没有一个关联扩展有效。每当我尝试使用关联扩展(例如.where)时,它都会退回到内置的 finder_sql:

这有效

*然而,这又回到了不正确的 finder_sql*

由于某种原因,关联扩展没有使用正确的finder_sql

如何让关联扩展尊重声明的 finder_sql?

问题似乎归结为未正确使用 finder_sql 的关联扩展。有什么办法可以强制执行吗?

0 投票
1 回答
161 浏览

ruby-on-rails - 您可以在具有自定义 finder_sql 的对象上使用关联扩展吗?

我的印象是custom_finderActiveRecord 中的选项意味着您可以免费获得关联扩展.where.order例如:

当然这不是一个很好的例子,因为“finder_sql”是如此微不足道,但它说明了这一点。

生成的 SQL

我期望以下

生成

即自定义finder_sql + where 子句

然而它实际产生的是

即它完全无视习惯finder_sql并试图将跳蚤加入当前的狗。

如果自定义finder_sql不会导致关联扩展尊重它,那么它有什么意义 - 它可能只是对象上的一个方法......

0 投票
1 回答
82 浏览

r - Win7 OS 上的 R 2.15.2 sqlFetch() 正在终止 R 会话

Win7 OS 上的R 2.15.2sqlFetch()正在终止 R 会话。但是,sqlQuery()函数在终止时正确返回值。请帮我解决问题。

0 投票
0 回答
206 浏览

ruby-on-rails - Rspec/Rails:使用 finder_sql 条件为 has_many 编写测试

这是我的has_many声明:

这是我的 Rspec 测试(失败了)。有没有办法为上述编写测试?我可以把它变成一个实例方法并对其进行测试,但试图让 this 有一个has_many范围。

0 投票
2 回答
2957 浏览

ruby-on-rails - 将复杂的 has_many 关系移植到 Rails >4.1(没有 finder_sql)

我正在将 Rails 应用程序移植到 Rails 4.2。这个 Rails 应用程序在关联中包含一些相当复杂的手动 SQL 代码 - 部分原因是 DB 优化(例如,子选择而不是 JOIN),部分原因是在编写时没有可行的替代方案(Rails 3.0),部分原因肯定是缺乏知识(我希望,至少 - 这很容易解决)。

示例:InternalMessage 类。消息可以在用户之间发送(InternalMessage 的收件人和消息的“删除”存储在 InternalMessagesRecipients 中,因为可以有多个),并且可以阅读、回复、转发和删除它们。该关联如下所示:

关键部分是最后的“OR”子句 - 通过这个关联,我想同时获得接收和发送的消息,这些消息分别与用户表连接:

因为 InternalMessage 可能有多个收件人(也可以发送给发件人本人)。

问:如何将它移植finder_sql到兼容 Rails 4.2 的has_many定义?