2016-02-16 55 views
1

我需要在我的Rails 4.2应用程序中获得MySQL全文搜索的针对性。所以我需要在select子句中使用别名(针对性)。如何使用'?'在Ruby On Rails中选择符号?

问题是使用'?'符号作为where子句,但在一个选择:

Model.select("articles.*, MATCH (name) AGAINST (? IN BOOLEAN MODE) AS pertinence", @search).where(...).order("pertinence DESC") 

如果我做的:

Model.select('articles.*, MATCH (name) AGAINST ("' + @search + '" IN BOOLEAN MODE) AS pertinence').where(...).order("pertinence DESC") 

我可以在@search引号(无消毒)和SQL注入的问题。

那么如何使用Active Record执行这种查询呢?

谢谢

回答

1

您可以手动清理搜索参数。

search_param = ActiveRecord::Base::sanitize(@search) 

Model.select("articles.*, MATCH (name) AGAINST (#{search_param} IN BOOLEAN MODE) AS pertinence").where(...).order("pertinence DESC") 
+0

太好了。有效 ! –