The where clause will give you full control over your query.
All
When using the all method, the SQL selected fields will always match the fields specified in the model.
Always pass in parameters to avoid SQL Injection. Use a ? in your query as placeholder. Checkout the Crystal DB Driver for documentation of the drivers.
Here are some examples:
posts =Post.all("WHERE name LIKE ?", [%{Joe%}])if posts posts.each do|post|puts post.nameendend# ORDER BY Exampleposts =Post.all("ORDER BY created_at DESC")# JOIN Exampleposts =Post.all("JOIN comments c ON c.post_id = post.id WHERE c.name = ? ORDER BY post.created_at DESC", ["Joe"])
First
It is common to only want the first result and append a LIMIT 1 to the query. This is what the first method does.
For example:
post =Post.first("ORDER BY posts.name DESC")
This is the same as:
post =Post.all("ORDER BY posts.name DESC LIMIT 1").first