【问题标题】:How to update part of the form field when submit form ruby on rails在rails上提交表单ruby时如何更新部分表单字段
【发布时间】:2015-11-12 04:46:45
【问题描述】:

我正在使用 ruby​​ on rails 表单助手。在我创建的表单中,我有几个输入字段:web_update(boolean)、value1(int)、value2(int)、value3(int)

  <div style="margin-left:30px">
   Load Value From Web Site  
   <%= f.check_box :load_web %>  
  </div>

   <div class="control-group">
    <%= f.label :value1, class: "control-label" %>
    <div class="controls">
      <%= f.text_field :value1, class: "input-large" %>
    </div>
  </div>

当我将 load_web 设置为 true 时,这意味着 value1-value3 字段和 load_web 列将更新到数据库。这工作正常。

但是当我将 load_web 设置为 false 时,我只想更新数据库中的 load_web 值,此表单也会更新 value1-value3 字段,并将它们更新为 0,而我希望它保持其原始值。

以下是我将 load_web 设置为 false 并更新表单时得到的参数:

Parameters:

{"utf8"=>"✓",
 "_method"=>"put",
 "authenticity_token"=>"YwbqeRIjadhMlPIA9fjc0Nm66p1bcu786HhaukofykU=",
 "project_id"=>"34",
 "load_web"=>"0",
 "value1"=>0.0,
 "value2"=>0.0,
 "value3"=>0.0},
 "commit"=>"Submit",
 "id"=>"9"}

如何根据当前 load_web 值从更新中删除 value1-value3? 或者有其他方法可以解决吗?

【问题讨论】:

    标签: ruby-on-rails forms


    【解决方案1】:

    这是一种方法,你可以做到。您可以有 2 个强参数声明。

    private
    
    def load_web_set_params
      params.permit(:load_web, :value1, :value2, :value3,..)
    end
    
    def load_web_unset_params
      params.permit(:load_web,...) # don't put value1 to value3 here
    end
    

    现在,在控制器内部,在更新之前测试load_web 的值并使用相应的方法进行更新。

    case load_web_unset_params[:load_web]
    when '0' then Model.update load_web_unset_params
    when '1' then Model.update load_web_set_params
    end
    

    【讨论】:

    • 谢谢!所以这段代码应该放在模型里面,但是它是如何覆盖默认更新方法的,所以当我点击提交时,它会被触发而不是默认更新?
    • @Orz 不需要放在模型里面。你可以把它放在控制器本身里面。
    • 谢谢!我发现我的错误出现在控制器上,没有检查值 nil,将其转换为数字并进行计算。我添加了一个函数检查 nil 并删除了更新 0 问题!
    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2012-12-15
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多