Is there a better DRY code writing for this scope?

I wrote this scope in my Subdomain model :

scope :in_account, lambda { |account_id|
if account_id == “*”
where(“account_id >= ?”, 0)
else
where(account_id: account_id)
end
}

where account_id == ‘*’ then all subdomain instances are selected
when account_id is given , only subdomain instances in this account are
selected

is there a better writing ?

thanks for feedback

On Wed, Nov 21, 2012 at 9:33 PM, Erwin [email protected] wrote:

where account_id == ‘*’ then all subdomain instances are selected
when account_id is given , only subdomain instances in this account are
selected

is there a better writing ?

you can use scoped instead

account_id == ‘*’ ? scoped : where(account_id: account_id)

https://groups.google.com/d/msg/rubyonrails-talk/-/3xoM8jq4ED8J.
For more options, visit https://groups.google.com/groups/opt_out.

Great !

Thanks Jim

Le mercredi 21 novembre 2012 15:04:57 UTC+1, jim a crit :

On Wed, Nov 21, 2012 at 8:33 AM, Erwin [email protected] wrote:

where account_id == ‘*’ then all subdomain instances are selected
when account_id is given , only subdomain instances in this account are
selected

is there a better writing ?

Try:

scope :in_account, lambda { |account_id|
where(account_id: account_id) if account_id != “*”
}

If the conditional fails, this will just not interfere with the query.

If it’s possible that account_id will be nil or blank (as on a page
accessed w/o passing any params), tack “&& account_id.present?” onto
the conditional.

-Dave


Dave A., the T. Rex of Codosaurus LLC,
secret-cleared freelance software developer
taking contracts in or near NoVa or remote.
See information at http://www.Codosaur.us/.