2016-07-30 5 views
0

既存のフィールドの値を表示しないform_tag私はこのような設定コントローラのセットアップました:Railsは

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 

indexアクションは、関連するパス内のビューファイルを持って次のように、そのコードは次のとおりです。

<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 %> 

これで、これらのフィールドのデータを関連するモデルに保存/更新でき、レールコンソールにコマンドSetting.allでデータが表示されます。しかし、問題は、設定インデックスページをリロードしたときにフォームを介してレコードを保存した後に、フォームが空白で、以前にフィールドに保存された値が表示されないということです。

私はここで間違っていますか?

答えて

0

保存後にオブジェクトを永続化する必要があるため、form_tagの代わりにform_for(@variable)を使用する必要があると思います。

リソースで動作するのform_for、ここで見てみましょう:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

+0

は、我々はform_tagヘルパーを持つフィールドの値を永続化することはできません。第2に、@setting変数でform_forヘルパーを使用しようとしましたが、 "フォームの最初の引数にはnilを含めることはできません。 –