Mysql Ruby中的绑定变量

Mysql Ruby中的绑定变量,mysql,ruby-on-rails,binding,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") 但是,我需要包括第三个变量,

我目前有一个表,如下所示:

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。在Ruby中,我是否可以从另一个表绑定变量?Project.findall会自动将SELECT*FROM项目传递到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::错误:未知表“projects”:选择projects.*FROMprojectstags,其中projects.status=2和projects.name类似“%”,或projects.description类似“%”,或tags.name类似“%”

考虑到项目表的存在,这很奇怪。既然我已经包括了另一个表,为什么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选项告诉activerecord对tags表执行SQL连接,这将允许您对tags列执行查询。在这个例子中还要注意我是如何添加项目的。“原始名称”列的前缀。这样您的数据库就不会混淆您想要的列的名称;项目或标记表中的一个。

请尝试以下大小:

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

:joins选项告诉activerecord对tags表执行SQL连接,这将允许您对tags列执行查询。在这个例子中还要注意我是如何添加项目的。“原始名称”列的前缀。这样您的数据库就不会混淆您想要的列的名称;项目或标记表中的一个。

项目和标记之间有关系吗?如果您查询的原因是存在,那么它应该反映在带有HABTM的ex模型中,这也使您能够轻松地基于该关系进行筛选,而无需编制复杂的SQL查询。

项目和标记之间是否存在任何关系?如果您的查询原因是存在,那么它应该反映在带有HABTM的ex模型中,这也将使您能够轻松地基于该关系进行筛选,而无需编制复杂的SQL查询。

结果表明,这只是一个简单的语法错误

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]}%"])
是正确的语法。:join后面需要跟着:标记,而不是标记
再次感谢大家的帮助

原来这只是一个简单的语法错误

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]}%"])
是正确的语法。:join后面需要跟着:标记,而不是标记
再次感谢大家的帮助

Mysql::错误:未知表“项目”:从projects.status=2和projects.name(如“%”或projects.description(如“%”)或tags.name(如“%”)中选择projects.*,projects=Project.find:all,:joins=>tags,:conditions=>[条件+和projects.name LIKE?或projects.description LIKE?或tags.name LIKE?,%%{params[:query]}%,%%{params[:query]}%,%%{params[:query]}%].plantMySQL::错误:未知表“项目”:从projects标记中选择projects.*,其中projects.status=2和projects.name类似于“%”或projects.description类似于“%”或tags.name类似于“%”或tags.name类似于“%”的projects=Project.find:all,:joins=>tags,:conditions=>[conditions+和projects.name类似于?或projects.description类似于?或tags.name类似于?,%{params[:query]}%,%%{params[:query]}%,%%{params[:query]}%]。无关系。标记表在站点中仅使用一次,用于站点管理。无关系。标记表在站点中仅使用一次,用于站点管理。