2011-08-09 6 views

答えて

6

私はこの宝石を使用していませんが、かなり前進しているようです。ビューに表示するために、すべての個々の設定を収集するためにあなたのindexアクションを定義します。ここから

rails g controller Settings 

:それはデータベース裏打ちされたモデルを使用しているので、あなたは、単に通常のようなコントローラを作成します

def index 
    @settings = Settings.all 
end 

次にビューで、あなたは、セットアップのループは、それらを表示することができます。

<% @settings.each do |setting| %> 
    <%= setting.var %> = <%= setting.value %> 
<% end %> 
デフォルトレールで一つだけ設提出することを期待するので、

は限り編集など...これは少しトリッキーかもしれません gを一度に編集します。このようにすることはできますが、ajaxで編集を実装しない限り、面倒で直感的ではありません。

もう1つの方法は、すべての個々の設定を一度に受け入れ、ループスルーし、それぞれを新しい値で更新するように更新メソッドを設定することです。それはこのようになります:

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

これべきすべての設定の出力ラベルとテキストフィールドの値として現在の値としてのvar名前で(彼らは変数@settingsに割り当てられている与えられました)。ルーティングが設定されていると仮定すると、このフォームを送信すると、それを受け取るアクションはparams変数のすべての新しい設定になります。そして、あなたはアクションでこのような何かを行うことができます。

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 

これは、あなたが設定を編集し、どのように多くの設定あなたが持っているどのくらいの頻度に応じて、最善の方法ではないかもしれない...しかし、これは可能な解決策です。

+0

神聖ながらくたを探して一つだけ、evalの主要なフラグです。そのようなことをする場合は、 'send'を使用することができます。そのような属性設定の詳細は、実行する場合は、設定モデル内から実装する必要があります。モデルの内部動作をコントローラに可視化しないでください。 – unflores

2

私はこれに関するいくつかの提案を探していましたが、これを後で探している人にとっては非常にシンプルでエレガントな別の答えが見つかりました。モデル内にダイナミックアクセサを設定するだけで、フォームに通常の属性と同様の設定フィールドを持たせることができます。例では、オリジナルの答えで見つけることができます:

How to create a form for the rails-settings plugin