我目前有一个表格,列出如下:
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”: SELECT
projects.* FROM
projectstags 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
列; projects
或 tags
表中的一个。
关于mysql - Ruby 中的绑定(bind)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4312135/