2011-09-15 4 views
7

Tengo una aplicación de Rails 3 que necesita algunas configuraciones definidas por el usuario. Me gustaría utilizar este complemento https://github.com/ledermann/rails-settings. Lo tengo trabajando en la consola de rieles. Pero estoy teniendo problemas para trabajar en un formulario. ¿Utilizo fields_for & attr_accessible? Si es así, no estoy teniendo suerte.Cómo crear un formulario para el complemento de configuración de raíles

tengo que añadir los ajustes por dos modelos: (. Lo anterior me da buenos resultados en la consola)

Por ejemplo, los ajustes que son específicos para un usuario,

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

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

pero necesito administrarlos a través de un formulario web estándar. Me encantaría saber cómo los demás están manejando esto.

Gracias.

Respuesta

13

Lo que hice es añadir setters/captadores dinámicos a mi clase de usuario como tal

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 esto, puede utilizar "color" al igual que cualquier otro atributo de su modelo de usuario. También es muy simple agregar más configuraciones, solo agréguelas a la lista

+0

Excelente respuesta - Estaba un poco inseguro de cómo hacer esto y esto funciona como un encanto. Hace que el uso de los raíles sea muy limpio, ¡muchas gracias! El autor de gemas debe publicar esto como un ejemplo en su Wiki Github. Mi único cambio fue hacer que la definición de función y la llamada a la función fueran privadas. – MikeH

+0

Cada vez que uso esto en un formulario, como las variables normales, obtengo: 'No se pueden asignar en masa los atributos protegidos: color, moneda, time_zone'. ¿Algunas ideas? – toobulkeh

+1

Sigo recibiendo el error "número incorrecto de argumentos (0 para 1)" cuando pruebo esto – scientiffic

Cuestiones relacionadas