模型update_attributes不更新值

时间:2011-12-21 18:12:23

标签: ruby-on-rails

Rails 2.3.5

我有一个表单,其中有一个名为'MAX'的表单字段,我包含一个'MIN'参数作为隐藏字段。 MIN参数正确包含在“threshold_control”参数集中。但是,由于某些原因,Rails在更新语句中不包括MIN。我根本不明白为什么MIN参数很好,而且形式为param set。

我想我可以手动更新SQL。有谁知道为什么MIN参数不包含在更新语句中?谢谢!

<% form_for(@threshold_control) do |f| %>
    <%= f.error_messages %>
    <%= hidden_field_tag(:min_max, 'same') %>
    <%= f.hidden_field :min, :value => @threshold_control.min %>


@threshold_control.update_attributes(params[:threshold_control])

Processing ThresholdControlsController#update (for 127.0.0.1 at 2011-12-21 11:59:50) [PUT]
  Parameters: {"commit"=>" Update ", "authenticity_token"=>"SZCCvAKRbHXEOhYp/+JcTJnMaI3YbxAP8LzwiqqfKbE=", "id"=>"71", "min_max"=>"same", "threshold_control"=>{"max"=>"12.1", "min"=>"12.0"}}
  ThresholdControl Columns (87.0ms)   SHOW FIELDS FROM `threshold_controls`
  ThresholdControl Load (1.0ms)   SELECT * FROM `threshold_controls` WHERE (`threshold_controls`.`id` = 71) 
  SQL (1.0ms)   BEGIN
  ThresholdControl Update (16.0ms)   UPDATE `threshold_controls` SET `max` = 12.1, `updated_at` = '2011-12-21 11:59:51' WHERE `id` = 71
  SQL (21.0ms)   COMMIT

1 个答案:

答案 0 :(得分:0)

所以它包含在参数中:

"threshold_control"=>{"max"=>"12.1", "min"=>"12.0"}

是min中db的实际列吗?你运行了所有的迁移吗?您是否在此模型的任何列上有attr_protected(或attr_accessible)?

另外,另外,如果min是db列 - 你不需要:value=> @threshold_control.min你应该能够逃脱:

<%= f.hidden_field :min %>

(即使你只在ruby动作中设置了@threshold_value的min并且它没有被保存) 如果上面没有填充min ...的值,那也是有用的。