2011-09-15 13 views
7

Ho un'app Rails 3 che ha bisogno di alcune impostazioni definite dall'utente. Mi piacerebbe utilizzare questo plugin https://github.com/ledermann/rails-settings. Ho funzionato nella console di rotaie. Ma sto avendo problemi a lavorare in una forma. Uso campi_per & attr_accessible? Se è così, non ho fortuna.Come creare un modulo per il plug-in delle impostazioni delle guide

ho bisogno di aggiungere le impostazioni per due modelli: (. È possibile che questo funziona bene per me nella console)

Ad esempio, le impostazioni che sono specifici per un utente,

user = User.find(123) 
user.settings.color = :red 
user.settings.color 
# => :red 

user.settings.all 
# => { "color" => :red } 

ma ho bisogno di amministrarli attraverso un modulo web standard. Mi piacerebbe sapere come gli altri stanno gestendo questo.

Grazie.

risposta

13

Quello che ho fatto è aggiungere dinamiche setter/getter alla mia classe User come tale

class User < ActiveRecord::Base 

    has_settings 

    def self.settings_attr_accessor(*args) 
    args.each do |method_name| 
     eval " 
     def #{method_name} 
      self.settings.send(:#{method_name}) 
     end 
     def #{method_name}=(value) 
      self.settings.send(:#{method_name}=, value) 
     end 
     " 
    end 
    end 

    settings_attr_accessor :color, :currency, :time_zone 

end 

Con questo, è possibile utilizzare "colore" come qualsiasi altro attributo del modello utente. Inoltre è molto semplice aggiungere più impostazioni, aggiungili all'elenco

+0

Ottima risposta - Ero un po 'incerto su come farlo e questo funziona come un incantesimo. Rende le impostazioni delle guide molto pulite - molte grazie! L'autore della gemma dovrebbe pubblicare questo come esempio sul suo Github Wiki. La mia unica modifica era di rendere privata la definizione e la funzione della funzione. – MikeH

+0

Ogni volta che lo uso in un modulo, come le variabili normali, ottengo: 'Impossibile assegnare in massa attributi protetti: colore, valuta, fuso orario'. Qualche idea? – toobulkeh

+1

Continuo a ricevere l'errore "numero errato di argomenti (0 per 1)" quando provo questo – scientiffic

Problemi correlati