2016-07-31 52 views
0

我是新來的鐵軌,我有一個非常簡單的情況來解決,但我不知道如何處理它。Rails:簡單的'設置'模型的鍵值屬性

我想用key, value屬性創建一個簡單的「設置」模型。 'SettingsController'可能只包含2個公共方法indexupdate。只有index行動將有一個窗體的視圖文件,其字段將表示'設置'表的每個記錄。

我希望能夠定義一些允許的鍵(可能使用一些私有方法),我希望表單創建或更新相關字段的記錄,然後將表單提交到update操作。

現在,我不知道我應該在控制器用什麼代碼indexupdate行動,並在其中可以同時創建/更新多條記錄都可以顯示更新的值的形式索引視圖文件時間。我如何繼續?

更新#1:

我已經成功地寫如下一些控制器操作(基於一些教程):

class Admin::SettingsController < ApplicationController 

    def index 
    @settings = Setting.all 
    end 

    def update 
    setting_params.each do |key, value| 
     Setting.where(key: key).first.update_attribute :value, value 
    end 

    redirect_to admin_settings_path, notice: "Settings saved." 
    end 

    private 

    def setting_params 
    params.require(:settings).permit(:site_title, :site_desc) 
    end 

end 

在索引視圖模板形式的代碼如下:

<h1>Settings</h1> 

<%= form_tag admin_settings_path, method: "put" do %> 

    <p> 
     <label>Site Title:</label> 
     <%= text_field_tag "settings[site_title]" %> 
    </p> 

    <p> 
     <label>Site Description:</label> 
     <%= text_field_tag "settings[site_desc]" %> 
    </p> 

    <p> 
     <%= submit_tag "Save settings" %> 
    </p> 

<% end %> 

此表格將正確的值保存在數據庫中,但保存的值不會保留在表單域中。

+0

爲什麼你不包括你已經寫的任何代碼,這樣我們就可以看到你如何思考你的問題。 – MarsAtomic

+0

我已經設法根據教程編寫一些代碼(上面發佈的更新),但由於我的要求與我正在面臨的教程略有不同,因此需要在表單字段中保存保存的值。 –

+0

您是否打算使用gem來獲得您想要的,還是您決定從頭創建自己的機制? – MarsAtomic

回答

1

也許問題出在index行動。 Setting.all返回一個數組Setting記錄,而不是像{key1:value,key2:value}這樣的散列,我認爲你正試圖實現該散列。因此,表格不正確地顯示數據。你可以試試這個:

def index 
    @setting = {} 
    pairs = Setting.pluck(:key, :value) 
    pairs.each { |key, value| @setting[key] = value } 
    @setting 
end 
+0

謝謝,但我想我還需要修改索引視圖文件中的表單代碼,我應該如何修改它? –

+0

那麼,我可以通過使用基於'@ setting'變量的第二個參數來保存現場保存的值,例如'<%= text_field_tag「settings [site_title]」,@setting [「site_title」]%>' ,所以問題現在解決了,再次感謝。 –