2010-05-25 18 views
10

Estoy trabajando en una aplicación de Rails que tiene autenticación de usuario que proporciona una cuenta de administrador. Dentro de la cuenta de administradores, he creado una página para la configuración de todo el sitio.¿Configuraciones de la aplicación Rails?

Me preguntaba cuál es la norma para crear estos ajustes. Digamos, por ejemplo, que me gustaría que una de las configuraciones sea cambiar el nombre de la aplicación o cambiar el color del encabezado.

Lo que estoy buscando es que alguien explique el proceso/método básico, no necesariamente el código específico, ¡aunque sería genial!

Respuesta

14

Para la configuración de aplicación general que no necesitan ser almacenados en una tabla de base de datos, me gusta crear un archivo config.yml dentro el directorio config. Para su ejemplo, podría tener este aspecto:

defaults: &defaults 
    app_title: My Awesome App 
    header_colour: #fff 

development: 
    <<: *defaults 

test: 
    <<: *defaults 
    app_title: My Awesome App (TEST ENV) 

production: 
    <<: *defaults 

Este archivo de configuración se carga desde un inicializador de costumbre en config/inicializadores:

rieles 2.x:

APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml")[RAILS_ENV] 

rieles 3.x:

APP_CONFIG = YAML.load_file("#{Rails.root}/config/config.yml")[Rails.env] 

A continuación, puede recuperar el valor usando:

title = APP_CONFIG['app_title'] 

Ver this Railscast para más detalles.

+0

En Rails 3.x 'Rails.env' se debe utilizar en lugar de' RAILS_ENV'. – Felix

6

Hay bastante buen complemento/gema Settingslogic.

# app/config/application.yml 
    defaults: &defaults 
    cool: 
     saweet: nested settings 
    neat_setting: 24 
    awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %> 

    development: 
    <<: *defaults 
    neat_setting: 800 

    test: 
    <<: *defaults 

    production: 
    <<: *defaults 

Puede utilizar estos ajustes en cualquier lugar, por ejemplo, en un modelo:

class Post < ActiveRecord::Base 
    self.per_page = Settings.pagination.posts_per_page 
    end 
Cuestiones relacionadas