2011-12-17 21 views
1

我尝试通过表单更新我的设置,但更新函数在我提交时未被调用。我在提交时重定向到edit_settings_path,并且根据服务器日志更新未被调用。为什么?rails form更新方法不叫

<%= 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' 不知道在哪里检查,因为它说它更新记录,但事实上没有。

+0

你在路由器中相应设置的路线? – clyfe 2011-12-18 12:02:18

+0

是的,我有'资源:设置'。现在它根据服务器日志'设置加载(0.2ms)SELECT“设置”更新。*从“设置”WHERE“设置”。“thing_type”IS NULL和“settings”。“thing_id”IS NULL和“设置”。 var“=':default_email'LIMIT 1 (0.3ms)UPDATE”settings“SET”value“='--- 1111aaa2222 ...',”updated_at“='2011-12-18 21:03:21.782075'WHERE “设置”。“id”= 2'但它不保存到Db – Gaelle 2011-12-18 21:05:48

+0

你必须打电话保存自己 – 2011-12-19 03:47:42

回答

0

你为什么使用form_tag方法?

如果你只是试图让一个标准更新的形式,使用方法:

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

你的控制器使用的编辑方法来呈现的calback视图和更新方法(与模型进行交互)

如果你坚持要用

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

通常你会使用奇异字,如果你是会员和多个上工作,如果您是在共同工作llection。

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

+0

表单至少修复了它的更新,但现在不保存。使用rails-settings gem以“垂直”方式存储数据。感谢加入 – Gaelle 2011-12-19 05:56:58