问题标签 [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.
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 关联工作。
sql - Rails find_by_sql - 如何运行通用查询
我需要执行此查询以找出 MySQL 将用于特定表的下一个 auto_increment 值。
如何调用这个特定的查询?这适用于我调用它并返回包含模型对象的大小为 1 的数组的任何模型。编辑:该对象包含一个名为 attributes 的散列,其中包含所需的 auto_increment 值。
还有其他方法可以运行此类通用查询吗?想知道改变使用 find_by_sql 的整个方法是否也可以解决原始问题。
ruby-on-rails - Rails3:如何将默认条件设置为 has_many
我有盒子和球。球在盒子里。球可以是红色和绿色。
我只想用绿球设置 has_many 。我知道 finder_sql 方法存在,但我不知道如何通过范围进行设置。
我希望以下示例是等效的:
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]
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 的关联扩展。有什么办法可以强制执行吗?
ruby-on-rails - 您可以在具有自定义 finder_sql 的对象上使用关联扩展吗?
我的印象是custom_finder
ActiveRecord 中的选项意味着您可以免费获得关联扩展.where
,.order
例如:
当然这不是一个很好的例子,因为“finder_sql”是如此微不足道,但它说明了这一点。
生成的 SQL
我期望以下
生成
即自定义finder_sql + where 子句
然而它实际产生的是
即它完全无视习惯finder_sql
并试图将跳蚤加入当前的狗。
如果自定义finder_sql
不会导致关联扩展尊重它,那么它有什么意义 - 它可能只是对象上的一个方法......
r - Win7 OS 上的 R 2.15.2 sqlFetch() 正在终止 R 会话
Win7 OS 上的R 2.15.2sqlFetch()
正在终止 R 会话。但是,sqlQuery()
函数在终止时正确返回值。请帮我解决问题。
ruby-on-rails - Rspec/Rails:使用 finder_sql 条件为 has_many 编写测试
这是我的has_many
声明:
这是我的 Rspec 测试(失败了)。有没有办法为上述编写测试?我可以把它变成一个实例方法并对其进行测试,但试图让 this 有一个has_many
范围。
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
定义?