2011-08-09 9 views

Respuesta

6

No he usado esta gema, pero parece que debería ser bastante directa. Puesto que utiliza un modelo de base de datos de respaldo, sólo tendría que crear un controlador de forma normal:

rails g controller Settings 

Desde aquí se definiría su acción index para reunir todos los ajustes individuales para su visualización en la vista:

def index 
    @settings = Settings.all 
end 

Luego, en la vista que se puede configurar un bucle para mostrarlos:

<% @settings.each do |setting| %> 
    <%= setting.var %> = <%= setting.value %> 
<% end %> 

en cuanto a la edición ... esto podría ser un poco complicado ya que por defecto rieles esperaría que presenten una sola settin g a la vez para editar. Podrías hacerlo de esta manera, pero a menos que implementes la edición con ajax puede ser tedioso y no intuitivo.

Otra forma sería configurar su método de actualización para aceptar todas las configuraciones individuales a la vez, recorrerlas y actualizar cada una con nuevos valores. Podría ser algo como esto:

// The /settings route would need to be setup manually since it is without an id (the default) 
<%= form_tag("/settings", :method => "put") do %> 
    <% @settings.each do |setting| %> 
    <%= label_tag(setting.var, setting.var) %> 
    <%= text_field_tag(setting.var, :value => setting.value) %> 
    <% end %> 
    <%= submit_tag("Save Changes") %> 
<% end %> 

Esta es la Salida todos los ajustes (dado que han sido asignados a las variables @settings) con el nombre var como la etiqueta y el valor actual como el valor del campo de texto. Suponiendo que el enrutamiento esté configurado, cuando envíe este formulario, la acción que lo reciba deberá incluir todas las configuraciones nuevas en la variable params. A continuación, puede hacer algo como esto en la acción:

def update 
    params.each_pair do |setting, value| 
    eval("Settings.#{setting} = #{value}") 
    end 
    redirect_to settings_path, :notice => 'Settings updated' # Redirect to the settings index 
end 

Esto puede no ser la mejor manera en función de la frecuencia con que editar la configuración y el número de ajustes que tienen ... pero esto es una solución posible.

+0

Mierda, eval es una bandera importante. Si va a hacer algo como eso, puede usar un 'enviar' y ese tipo de detalle de configuración de atributo debe implementarse desde su modelo de Configuración si va a hacerlo. No le dé visibilidad a su controlador en el funcionamiento interno de un modelo. – unflores

2

Estaba buscando algunas sugerencias para esto y encontré otra respuesta a esto que es muy simple y elegante, para cualquiera que busque esto más tarde. Simplemente configura accesos dinámicos en su modelo, lo que permite que su formulario tenga campos de configuración como sus atributos normales. Un ejemplo se puede encontrar en la respuesta original:

How to create a form for the rails-settings plugin

Cuestiones relacionadas