How I write it in rails format? Articles.find( ???)
SELECT *, MATCH(title, body) AGAINST(’$keyword’) AS score FROM articles
WHERE MATCH(title, body) AGAINST(’$keyword’) ORDER BY score DESC
How I write it in rails format? Articles.find( ???)
SELECT *, MATCH(title, body) AGAINST(’$keyword’) AS score FROM articles
WHERE MATCH(title, body) AGAINST(’$keyword’) ORDER BY score DESC
On Feb 27, 2009, at 11:29 AM, Ga Ga wrote:
How I write it in rails format? Articles.find( ???)
SELECT *, MATCH(title, body) AGAINST(‘$keyword’) AS score FROM
articles
WHERE MATCH(title, body) AGAINST(‘$keyword’) ORDER BY score DESC
Obviously, you’d have to try it yourself, but:
match_part = sanitize_sql([‘MATCH(title, body) AGAINST(?)’, keyword])
Article.find(:all, :select => “*, #{match_part} AS score”,
:conditions => match_part, :order => ‘score DESC’)
I’m guessing that the $keyword is from Perl, but I’ve assumed that you
have a local variable called keyword. Look closely at whether the
conditions end up correct or if things get double-escaped in the final
SQL.
-Rob
I get:
undefined method `sanitize_sql’
Ga Ga wrote:
I get:
undefined method `sanitize_sql’
Help ?
On Feb 27, 2009, at 11:42 AM, Rob B. wrote:
match_part =
self.class.
Sorry, if you look at the docs, sanitize_sql is a protected class
method of ActiveRecord::Base
-Rob
Rob B. wrote:
On Feb 27, 2009, at 11:42 AM, Rob B. wrote:
match_part =
self.class.Sorry, if you look at the docs, sanitize_sql is a protected class
method of ActiveRecord::Base
Is there some alternative way to it, and not to use protected classes?
On Feb 27, 2009, at 2:56 PM, Ga Ga wrote:
Is there some alternative way to it, and not to use protected classes?
It’s not a protected “class”, it’s a protected method in the class
ActiveRecord::Base which your Article class is a sub-class. If you
don’t like the form of the call, make your own class method like this:
class Article
def self.keyword_find(keyword)
match_part = sanitize_sql([‘MATCH(title, body) AGAINST(?)’,
keyword])
find(:all, :select => “*, #{match_part} AS score”,
:conditions => match_part, :order => ‘score DESC’)
end
end
Then just call “normally”:
good_articles = Article.keyword_find(‘chocolate’)
Does that make you happier? There’s nothing wrong with using
sanitize_sql, you just need to call it from the Article class rather
than ‘directly’.
-Rob
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs