Apenas escrevendo isso para que eu possa lembrar se eu precisar dele novamente, estou no meio da criação de um módulo de modelagem de domínio flexível genérico (eu o chamo de flexi-model).
Em resumo, o flexi-model é uma ferramenta de modelagem menos flexível do esquema. Ele pode armazenar seus dados de qualquer tipo de truque, fornecendo apenas um método de valor genérico e pegar o tipo de coluna correto da definição de coluna predefinida da classe de modelo.
Apenas para facilitar a compreensão, aqui está um código de amostra –
class Product
include FlexiModel
flexi_field :name, :string
flexi_field :price, :decimal
set_flexi_partition_id USER.store.id
end
Tenho a seguinte estrutura em –
[Coleção – para esquema dinâmico] – <[Registro] – <[Valor]
No formulário estou usando f.datetime_select: value onde ( f denota fields_for da instância Value) depois que o envio rails estava tentando descobrir o que é : coluna de valor na definição da tabela. uma vez que não é uma coluna existente, o rails estava gerando um erro MultiparameterAssignmentErrors .
Logo depois de cavar um pouco mais, parece que o valor de leitura from_parameters é responsável por carregar a definição de coluna real. Então, para simular, eu adicionei o seguinte código e ele funciona –
# Put it on your model instance
def column_for_attribute(name)
# Put your accessor name, in my case :value
if :value == name.to_sym
self.class.columns_hash[self.field.value_column.to_s]
else
self.class.columns_hash[name.to_s]
end
end
Isso é tudo 🙂
Copiado da postagem do meu blog – http://we4tech.wordpress.com/2012/06/20/simple-trick-to-work-with-activerecord-dynamic-column-and-encapsulated-accessor/