Ruby code beautification, split long instructions on multiple lines
How can we write the following statement to improve readability?
Promotion.joins(:category).where(["lft>=? and rgt<=?", c.lft, c.rgt]).joins(:shops).where(:promotions_per_shops => { :shop_id => shops_id }).count('id', :distinct => true)
The following doesn't compile
Promotion.joins(:category)
.where(["lft>=? and rgt<=?", c.lft, c.rgt])
.joins(:shops)
.where(:promotions_per_shops => { :shop_id => shops_id })
.count('id', :distinct => true)
syntax error, unexpected '.', expecting kEND
.where(["lft>=? and rgt<=?", c.lft, c.rgt])
Solution 1:
Also possible to do
Promotion.joins(:category) \
.where(["lft>=? and rgt<=?", c.lft, c.rgt]) \
.joins(:shops) \
.where(:promotions_per_shops => { :shop_id => shops_id }) \
.count('id', :distinct => true)
Solution 2:
Do it like this:
Promotion.joins(:category).
where(["lft>=? and rgt<=?", c.lft, c.rgt]).
joins(:shops).
where(:promotions_per_shops => { :shop_id => shops_id }).
count('id', :distinct => true)
Solution 3:
It should compile in 1.9. In previous versions it was invalid indeed.