Rails has_many具有动态条件

我想要的是创建一个模型,该模型使用has_many关联以动态方式与另一个模型连接,而无需像这样的外键:


has_many :faixas_aliquotas, :class_name => 'Fiscal::FaixaAliquota',

            :conditions => ["regra_fiscal = ?", ( lambda { return self.regra_fiscal } ) ]

但是我得到了错误:


: SELECT * FROM "fis_faixa_aliquota" WHERE ("fis_faixa_aliquota".situacao_fiscal_id = 1

AND (regra_fiscal = E'--- !ruby/object:Proc {}'))

这可能吗?



SMILET
浏览 789回答 3
3回答

繁花如伊

Rails 4+方式(感谢Thomas在下面回答了此问题):has_many :faixas_aliquotas, -> (object) {            where("regra_fiscal = ?", object.regra_fiscal)         },         :class_name => 'Fiscal::FaixaAliquota'Rails 3.1+方式:has_many :faixas_aliquotas, :class_name => 'Fiscal::FaixaAliquota',         :conditions => proc { "regra_fiscal = #{self.regra_fiscal}" }Rails 3及以下:has_many :faixas_aliquotas, :class_name => 'Fiscal::FaixaAliquota',         :conditions => ['regra_fiscal = #{self.regra_fiscal}']不,这不是错误。条件用单引号引起来,仍然包含代码#{self.regra_fiscal}。当条件子句被撤消时,regra_fiscal方法将在的对象上调用self(无论该类是什么)。用双引号将不起作用。我希望这是您要寻找的。

沧海一幻觉

Rails 4 +方式:has_many :faixas_aliquotas, -> (object){ where("regra_fiscal = ?", object.regra_fiscal)},  :class_name => 'Fiscal::FaixaAliquota'
打开App,查看更多内容
随时随地看视频慕课网APP