如何在 rails 上提交 ruby 表单之前处理文本输入数据

How to process text input data before form submit ruby on rails

我正在使用 rails 表单助手来生成表单并从用户那里检索数据。 像这样

<div class="controls">
  <%= f.text_field :duration, class: "input-large" %>
</div>

但是,我需要这个输入,在将其存储到数据库 'duration' 列之前,乘以 10。 我已经对此进行了搜索并尝试实现一个方法,创建一个函数,将值相乘,然后在 before_save

下调用它
before_save  :multiply_ten, on: [ :create,:update ]

问题是,我不仅使用网页表单更新此列,而且还通过 device.by 发送的 http 请求实现这一点,我将所有值乘以 10,但我只想要网络表单输入部分乘以 10。 有没有办法以 css 形式或有其他技巧? 谢谢

有多种方法可以实现您的目标。由于在特定 Web 表单的情况下,您只想将持续时间乘以 10,因此我建议在控制器级别甚至在视图级别而不是在模型级别进行乘法运算。

您可以让您的视图在通过 javascript 发出请求之前修改 http 参数。

或者,如果您更愿意在控制器级别执行此操作,则需要一种方式来告知控制器提交表单实际上是需要乘法的表单。示例:

首先,在您看来,通过隐藏输入添加一个额外的参数,表示该表单需要乘以 10:

<%= hidden_field_tag :special_form, true %>

然后,在您的控制器中,在将属性分配给要保存的新对象之前,如果 params[:special_form] 存在,请修改参数:

params[:duration] = params[:duration].to_f * 10 if params[:special_form].present?

希望对您有所帮助!