rails表单更新方法未调用

时间:2011-12-17 22:35:08

标签: ruby-on-rails-3 forms

我尝试通过表单更新我的设置,但在提交时不会调用更新功能。当我提交时,它会重定向到edit_settings_path,并且不会调用每个服务日志更新。为什么呢?

<%= form_tag settings_path, :method => :put do %>
<p>
  <%= label_tag :"settings[:default_email]", "System Administrator" %>
  <%= text_field_tag :"settings[:default_email]", Settings['default_email'] %>
</p>
  <span class="submit"><%= submit_tag "Save settings" %></span>
<% end %>

控制器

class SettingsController < ApplicationController
  def update
    params[:settings].each do |name, value|
     Settings[name] = value
    end

   redirect_to edit_settings_path, :notice => "Settings have been saved." }
  end
end

**更新** 现在可以正确调用更新(已编辑的控制器)。服务器日志确认Settings Load (0.2ms) SELECT "settings".* FROM "settings" WHERE "settings"."thing_type" IS NULL AND "settings"."thing_id" IS NULL AND "settings"."var" = ':default_email' LIMIT 1 UPDATE "settings" SET "value" = '--- 1111aaa2222...', "updated_at" = '2011-12-18 21:03:21.782075' WHERE "settings"."id" = 2

然而它没有保存到Db并且不知道为什么。我正在使用Rails-settings gem'git://github.com/100hz/rails-settings.git' 不知道在哪里检查,因为它说它更新了记录,但实际上没有。

1 个答案:

答案 0 :(得分:0)

为什么使用form_tag方法?

如果您只是想制作标准更新表单,请使用:

<%= form_for(@settings) do |f| %>
      FORM CODE
<%= end %>

您的控制器使用edit方法呈现视图和calback的更新方法(与模型交互)

如果你坚持使用

<%= form_tag setting_path, :method => :put do %>

通常情况下,如果您正在处理成员,则使用单数单词;如果您正在处理集合,则使用复数。

fyi:我不知道你的设计是什么样的,但我会有一个模型设置和一个模型settings_item ......