mysql - Ruby 中的绑定(bind)变量

标签 mysql ruby-on-rails binding

我目前有一个表格,列出如下:

projects = Project.find(:all, :conditions => [conditions + "AND (name LIKE ? OR description LIKE ?)", "%#{params[:query]}%", "%#{params[:query]}%"])

哪里

 conditions = Project.in_used_projects(:alias => "projects")

但是我需要包含第三个变量,该变量不是来自项目表,而是来自标签表。我需要的列是Tag -> Names。无论如何,我可以绑定(bind) Ruby 中另一个表的变量吗? Project.find(all) 自动将 SELECT * FROM Project 传递到 MYSQL。有人建议使用 join 函数,但我不确定这将如何工作。有什么想法吗?

编辑 1

我已经尝试过使用建议的答案

projects = Project.find(:all, :joins => "tags", :conditions => [conditions + "AND (projects.name LIKE ? OR description LIKE ? OR tags.name LIKE ?", ["%#{params[:query]}%" * 3]].flatten)

但现在我收到另一个错误

Mysql::Error: 未知表“projects”: SELECTprojects.* FROMprojectstags WHERE ((projects.status = 2)AND (projects .name LIKE '%%' 或项目.description LIKE '%%' 或标签.name LIKE '%%')

考虑到项目表的存在,这很奇怪。既然我已经包含了另一个表,为什么 Ruby 无法识别它?

最佳答案

试试这个尺寸:

projects = Project.find(:all, :joins => "tags", :conditions => [conditions + "AND (projects.name LIKE ? OR description LIKE ? OR tags.name LIKE ?", ["%#{params[:query]}%" * 3]].flatten)

:joins 选项告诉 Active Record 对 tags 表执行 SQL 连接,这将允许您对标签列执行查询。另请注意在此示例中我如何将 projects. 前缀添加到原始 name 列中。这样您的数据库就不会混淆您想要的 name 列; projectstags 表中的一个。

关于mysql - Ruby 中的绑定(bind)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4312135/

相关文章:

sql - 在 postgresql json 字段中选择键的唯一值

mysql - ActiveRecord 的行为不符合我的预期

c# - wpf 将列表框项目绑定(bind)到静态列表

Java MySQL检查数据库中是否存在值

php - 我将如何返回数组中与任何 $_POST 结果不匹配的任何项目

php - 如何在codeigniter中连接2个表

php - 为 PHP 选择正确的 MySQL 连接

ruby-on-rails - 覆盖 rails update_all 方法

objective-c - 具有 subview 和多个 NIB 的核心数据绑定(bind)

c# - 将 Grid.RowDefinition 高度绑定(bind)到 Xamarin 中的网格宽度