2016-02-16 69 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

太好了。有效 ! –