То, что я хочу, должно создать Модель, которая соединяется с другим использованием 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 {}'))
Действительно ли это возможно?
has_many :faixas_aliquotas, -> (object) {
where("regra_fiscal = ?", object.regra_fiscal)
},
:class_name => 'Fiscal::FaixaAliquota'
has_many :faixas_aliquotas, :class_name => 'Fiscal::FaixaAliquota',
:conditions => proc { "regra_fiscal = #{self.regra_fiscal}" }
has_many :faixas_aliquotas, :class_name => 'Fiscal::FaixaAliquota',
:conditions => ['regra_fiscal = #{self.regra_fiscal}']
Нет. Это не ошибка. Условия указаны в одинарных кавычках и по-прежнему содержат код # {self.regra_fiscal}
. Когда условие условия будет оценено, метод regra_fiscal будет вызываться для объекта self
(независимо от класса). Использование двойных кавычек не сработает.
Надеюсь, это то, что вы ищете.
Есть другое решение. Однако это не будет областью действия по умолчанию.
has_many :faixas_aliquotas, :class_name => 'Fiscal::FaixaAliquota' do
def filter(situacao_fiscal)
find(:all, :conditions => {:regra_fiscal => situacao_fiscal.regra_fiscal})
end
end
Таким образом вы сможете сделать
situacao_fiscal.faixas_aliquotas.filter(situacao_fiscal)
Я не уверен, что это изящно и что-то, что могло бы решить вашу проблему. Могут быть более эффективные способы сделать это.