Active Record Store consente di serializzare i parametri all'interno di una singola cella.Dynamic Active Record Accede ai programmi basati su un modulo utente?
I.e.
class User < ActiveRecord::Base
store :options, accessors: [ :option1, :option2, :another_random_option ]
end
Tutte le funzioni di accesso vengono serializzati all'interno della colonna "Opzioni" della tabella utenti ora.
u = User.new
u.option2 = 'some option'
u.option2 # => 'some option'
Questa grande opera per la mia applicazione perché devo creare molte forme su una base quotidiana, dove il 90% della forma è la stessa (nome utente, hobby, interessi, ecc) e quindi il 10% sono schema -less (random_option_here, another_random_option_in_another_form). Non ho nemmeno bisogno di ordinare le opzioni senza schema.
Quello che ho fatto è stato creare 1 tabella per il 90% dei campi modulo sempre uguali, quindi ho un'altra tabella con l'ultimo 10% dei campi (il motivo per cui ho un'altra tabella è perché questo è una relazione belongs_to, quindi l'utente può avere molte righe in questa tabella).
<%= form_tag do %>
<%= #render partial form for an object that has non-changing fields %>
...
<%= #render a schema-less partial form based off an ID passed here %>
<% end >
Ora l'unico problema è che ogni volta che creare un nuovo campo nel modulo personalizzato, devo aggiungere che il parametro in Active Record Store di accesso, altrimenti ottengo un metodo di errore mancante. Sarebbe bello se potessi entrare e creare tutti i moduli View che voglio per i campi senza schema e non aggiornare mai gli accessor nel Modello.
Quindi la mia domanda è: c'è comunque un modo per aggiungere dinamicamente tutti i campi personalizzati inviati dall'utente all'array degli accessors, in questo modo se l'utente ha inviato campi "some_random_option1221", "another_option_here", quindi non devo entrare nel array di accessori e aggiungere quel campo?
Grazie!
Così bello, sembra come '' num_fields = options.try (: keys) .try (: count) || 0'' non è necessario, è possibile aggiungere un valore predefinito '' {} '' ai campi delle opzioni, quindi options.keys solo una matrice vuota. – zw963