2012-04-02 95 views
0

我使用https://github.com/Squeegy/rails-settings以及Activeadmin的Squeegy使用rails-settings。我試圖做到的是讓在ActiveAdmin的形式,我可以讓網站管理員改變其採取的命令行語法站點的設置,:ActiveAdmin中的自定義設置表格

Setting.foo = "bar" 
Setting.site_title = "My Awesome Site!" 
Setting.max_users = 35 

我真的不認爲我」已經太過分了,但我已經被卡住了。我到有一個定製ActiveAdmin形式的點:

ActiveAdmin.register_page "Settings" do 
    action_item do 
    link_to "View Site", "/" 
    end 


    content do 
    form do |f| 
     #Inputs for Settings 
    end 
    end 
end 

但我甚至不知道如何開始鋪設的形式直接訪問設置模式,或者如何使自定義控制器處理輸入。我想,如果我可以將輸入發送給我可以製作的控制器,那我就沒問題。

回答

1

我不認爲你希望你的網站的形式,直接改變ActiveAdmin的設置,我會......

  1. 創建新表,如。管理員設置併爲要存儲的每個設置添加字段,例如site_title,或者可以使用每行設置,這意味着您可以在將來添加新設置而不更改數據庫

  2. 將表單Activeadmin保持您的設置

  3. 添加一些功能,以您的模式搶得的設置,所以你可以做這樣的事情..

    Setting.site_title = Adminsetting.getsitetitle

你可能是聰明的與您的模型方法和使用method_missing的設施,你需要的代碼量最少獲得設置...

class << self 
    def method_missing(method, *args, &block) 
    setting = Adminsetting.where(:code => method.to_s).first 
    if setting 
     return setting.content 
    else 
     return super(method, *args, &block) 
    end 
end 

也許你可以打包成一個寶石這個,因爲它可能是一個對他人有用的東西。

2

這對於ActiveAdmin來說非常簡單。 比方說你的設置類是設置:

ActiveAdmin.register_page "Settings" do 
    content do 
    table :class => 'settings' do 
     thead do 
     th 'Setting' 
     th 'Value' 
     th '' 
     end 
     Settings.all.each do |key, val| 
     tr do 
      td strong key 
      td val 
      td do 
      link_to "delete", admin_settings_delete_path(:key => key), :method => :post 
      end 
     end 
     end 
     tr do 
     form :action => admin_settings_create_path, :method => :post do 
      td do 
      input :name => 'key' 
      end 
      td do 
      input :name => 'val' 
      end 
      td do 
      input :type => 'submit', :value => 'Add' 
      end 
     end 
     end 
    end 
    end 

    page_action :create, :method => :post do 
    Settings[params[:key]] = params[:val] 
    redirect_to :back, :notice => "#{params[:key]} added" 
    end 

    page_action :delete, :method => :post do 
    Settings.destroy params[:key] 
    redirect_to :back, :notice => "#{params[:key]} deleted" 
    end 
end 

當然,你需要添加一些CSS,也許一些驗證,但你有你的設置頁面。

編輯: 請注意,我寫這個爲rails-settings-cached,而不是rails-settings,但我的快速搜索導致在這裏,所以我想這可能仍然有助於某人。

相關問題