Fork me on GitHub

query

An article by Gaspard Bucher

dynamic query building from params or other attributes

dynamic query building from params or other attributes

  • default (query used when no parameter is given)
  • eval RubyLess to access query (default = params[:qb])
  • select RubyLess string to access query
see New scope index

This method can be used to dynamically compile queries depending on params or other contextual elements.

You should not use this where you can use context. The compilation is slower and has to be made on every request.

Usage example:

params[:qb]

Use the default params[:qb] as pseudo sql:

<ul do='query' default='nodes in project'>
  <li do='each' do='link'/>
</ul>

select

Using dynamic ‘select’ string as pseudo sql:

<ul do='query' select='pages in #{params[:scope] || \"project\"}' default='pages in project'>
  <li do='each' do='link'/>
</ul>

The default query is used to get the new context inside the query block (do we have a Page, a Contact, ...).

eval

Finally, you can use any RubyLess evaluated expression as source for the pseudo sql:

<ul do='query' eval='stored_qb' default='pages in project'>
  <li do='each' do='link'/>
</ul>

This example uses the value in a “stored_qb” property as pseudo sql. The “stored_qb” property has to be defined in the virtual class definition.

Error reporting

If an error occurs during the query, the field “query_errors” will contain the error message. A common idiom is therefore:

<ul do='query' eval='stored_qb' default='pages in project'>
  <li do='each' do='link'/>
  <li do='elseif' test='query_errors' do='query_errors'/>
  <li do='else' do='t'>nothing found</li>
</ul>