我目前有一个表格如下:
projects = Project.find(:all, :conditions => [conditions + "AND (name LIKE ? OR description LIKE ?)", "%#{params[:query]}%", "%#{params[:query]}%"])
其中
conditions = Project.in_used_projects(:alias => "projects")
但是我需要包含一个第三个变量,它不是来自Project表而是来自Tags表。我需要的列是Tag - > Names
。无论如何我可以从Ruby中的另一个表绑定变量吗? Project.find(all)
会自动将SELECT * FROM Project
传递给MYSQL。有人建议使用连接功能,但我不确定这是如何工作的。有什么想法吗?
编辑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: Unknown table 'projects': SELECT
{项目{1}} {项目{1}}
考虑到项目表存在,这很奇怪。为什么Ruby现在还没有认识到我已经包含了另一个表?
答案 0 :(得分:2)
尝试这个尺寸:
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连接,这将允许您对tags列执行查询。另请注意,在此示例中,我如何将projects.
前缀添加到原始name
列。这样您的数据库就不会混淆您想要的name
列;来自projects
或tags
表的那个。
答案 1 :(得分:1)
项目和标签之间有关系吗?如果您的查询的原因是,它应该反映在模型中(例如,使用HABTM),这也使您能够轻松地根据该关系进行过滤,而无需制作复杂的SQL查询。
答案 2 :(得分:0)
原来这只是一个简单的语法错误
projects = Project.find(:all, :joins=>:tags, :conditions => [conditions + "AN rojects.name LIKE ? OR projects.description LIKE ? OR tags.name LIKE ?)", "%# ams[:query]}%", "%#{params[:query]}%", "%#{params[:query]}%"])
是正确的语法。 :连接需要跟随:标签,而不是“标签” 再次感谢大家的帮助