Como posso lidar com dados que devem ser mantidas em um banco de dados, mas não é um modelo adequado, em Ruby on Rails?

StackOverflow https://stackoverflow.com/questions/114192

  •  02-07-2019
  •  | 
  •  

Pergunta

Imagine uma aplicação web escrita em Ruby on Rails. Parte do estado de que a aplicação é representado em um pedaço de dados que não se encaixam na descrição de um modelo. Este descritor estado precisa ser mantido no mesmo banco de dados como os modelos. Onde ele difere de um modelo é que precisa haver apenas uma instância de sua classe e que não tem relações com outras classes.

Alguém se deparar com qualquer coisa assim?

Foi útil?

Solução

De sua descrição Eu acho que os trilhos-configurações do plugin deve fazer o que você precisa.

Desde o Readme:

"Configurações é um plugin que torna o gerenciamento de uma tabela de chave global, pares de valores fácil. Pense nisso como um Hash mundial armazenados em você banco de dados, que usos simples ActiveRecord como métodos para a manipulação. Mantenha o controle de qualquer configuração global que você não quero código rígido em seu rails aplicativo. Você pode armazenar qualquer tipo de objeto. Cordas, números, matrizes, ou qualquer objeto. "

http://github.com/Squeegy/rails-settings/tree/master

Outras dicas

Se for dados, e é no banco de dados, é parte do modelo.

Isto não é realmente um problema RoR; é um problema geral de design OO.

Se fosse comigo, eu provavelmente encontrar uma maneira de conceituar os dados como um modelo e, em seguida, apenas torná-lo um singleton com um método de fábrica e um construtor privado.

Como alternativa, você pode pensar nisso como uma forma de exploração madeireira. Nesse caso, você só tem uma classe Logger (também um singleton) que lê / escreve o banco de dados diretamente e é invocado no início e no final de cada solicitação.

Em Rails, se os dados estão no banco de dados está em um modelo. Neste caso, o modelo pode ser chamado de "Configuração", mas ainda é mapeado para uma classe ActiveRecord em seu sistema Rails.

Se esses dados é verdadeiramente estático, você pode não precisar do banco de dados. Você poderia usar (como exemplo) uma variável no seu controlador do aplicativo:

class ApplicationController < ActionController::Base
  helper :all 
  @data = "YOUR DATA HERE"   
end

Há uma série de abordagens que podem ser usados ??para dados instanciar para uso em uma aplicação Rails.

Eu não tenho certeza eu entendo por que você diz que não pode caber em um modelo de Rails.

Se é apenas uma estrutura de dados complexa, apenas salvar um monte de código Ruby em um campo de texto no banco de dados: -)

Se por exemplo você tem um hash aninhado complexo que pretende guardar, atribuir o seguinte ao seu campo de texto 'dados':

ComplexThing.data = complex_hash.inspect

Quando você quiser lê-lo de volta, simplesmente

complex_hash = eval ComplexThing.data

Deixe-me salientar mais 2 coisas sobre esta solução:

  • Se a sua estrutura de dados não é classes Ruby padrão, uma simples inspeção pode não fazê-lo. Se você ver #. em qualquer lugar, algo não está sendo serializado corretamente
  • Esta é uma implementação ingênua. Você pode querer verificar para fora soluções reais de triagem se o risco de ter dados Unicode ou se você realmente está salvando um monte de aulas feitas sob medida.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top