Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails has_many with dynamic conditions

What I want is to create a Model that connects with another using a has_many association in a dynamic way, without the foreign key like this:

has_many :faixas_aliquotas, :class_name => 'Fiscal::FaixaAliquota',             :conditions => ["regra_fiscal = ?", ( lambda { return self.regra_fiscal } ) ] 

But I get the error:

: SELECT * FROM "fis_faixa_aliquota" WHERE ("fis_faixa_aliquota".situacao_fiscal_id = 1 AND (regra_fiscal = E'--- !ruby/object:Proc {}')) 

Is this possible?

like image 799
Fabiano Soriani Avatar asked Mar 17 '10 12:03

Fabiano Soriani


1 Answers

Rails 4+ way (Thanks to Thomas who answered this below):

has_many :faixas_aliquotas, -> (object) {             where("regra_fiscal = ?", object.regra_fiscal)          },          :class_name => 'Fiscal::FaixaAliquota' 

Rails 3.1+ way:

has_many :faixas_aliquotas, :class_name => 'Fiscal::FaixaAliquota',          :conditions => proc { "regra_fiscal = #{self.regra_fiscal}" } 

Rails 3 and below:

has_many :faixas_aliquotas, :class_name => 'Fiscal::FaixaAliquota',          :conditions => ['regra_fiscal = #{self.regra_fiscal}'] 

No. This is not a mistake. The conditions are specified in single quotes and still contains the code #{self.regra_fiscal}. When the conditions clause is evaulated, the regra_fiscal method will be called on the object of self (whatever the class is). Putting double quotes will not work.

I hope this is what you are looking for.

like image 90
Chirantan Avatar answered Sep 25 '22 14:09

Chirantan