0

我需要什么 - 某种方式来获取输入到表单中的数字,以便在更新之前根据以前的记录检查它,这样如果发生验证错误,可以在提交表单之前提示用户确认。参数可以工作,但只有在表单发布后才会返回 - 所以没有帮助。是否有可以传递给 ruby​​ 变量的 ajax 调用?或者可能是某种 ruby​​ 代码,可以在不提交或链接的情况下读取文本框中的输入?

我在做什么-我正在尝试设置“手动验证”,因为我不希望验证“阻止”保存。相反,它应该更像是一种确认。

如果你关心上下文,这里是破败——我有一个客户每月支付存款。我们通过第三方通过电话确认这些存款。当然,为了尽可能获得最准确的数据,我们必须考虑人为错误和其他因素。本月的存款永远不应少于上个月的存款——但存款可以从一个账户“转移”到另一个账户,这会使存款看起来更少。我有一个输入新数据的表格,我希望它与以前的记录核对,看看存款是多于还是少于以前报告的。如果少于,它应该要求确认——“你确定吗?” 之类的事情。

代码陈旧过时,应该从头开始更改,但是当我有几天的时间来做这件事时需要几个月的时间。我只是在找补丁。

到目前为止,请注意 cur_deposit 是本月,rec_deposit 是上个月。

<%
arr1 = []
arr2 = []
is_less = false

r = @recent_inquiries.last
r.inquiry_deposits.order(:id).each do |t|
  arr1 << t.cur_deposit.to_f
  arr1 << t.rec_deposit.to_f
end
@inquiry.inquiry_deposits.order(:id).each do |td|
    #============THIS is the part that needs help
    arr2 << params["cur_deposit_text_box"]
    arr2 << params["rec_deposit_text_box"]
end
i = 0
while i < (arr1.size - 1)
  comp_arr1 = []
  comp_arr2 = []
  comp_arr1 << arr1[i]
  comp_arr1 << arr1[i + 1]
  comp_arr2 << arr2[i]
  comp_arr2 << arr2[i + 1]
  if Inquiry.compare_deposits(comp_arr1, comp_arr2) != nil then is_less = true end
  i = i + 2
end

if is_less
  strConf = "A deposit from last month is greater than the same deposit this month, which should not happen.  Are you sure?"
end
%>
<%= submit_tag "Save Inquiry", :onclick=>"$('#submit_form').val('Save Inquiry summary');", :class => 'tgButton3', :id => 'save_inquiry_button_bottom', :confirm => strConf %>

当我让这段代码工作时,我会将所有功能代码存储到一个模型中——我只是将它放在视图中进行测试。可以安全地假设此脚本调用的所有“自定义方法”都在运行。如果您需要他们的代码,我会很乐意分享。

导轨版本 3.0.20

4

2 回答 2

0

你可以在你的网站上使用 jQuery 吗?(如果不是,它可以在纯 javascript 中实现)

$('#id-of-your-field').change(function(e){
 //do here your client side logic if any needed
 var yourfirstvalue = $(e.target).val();
 //now take the value and send it to server (your ruby stuff)
 $.ajax({
   url: yourURL + "/" + yourfirstvalue,
   success: function(data){
      //this data can be sent as JSON in structure which suits the best to you
      //so you can use it to populate your second dropdown
      var values = JSON.parse(data);
      //use your values
   }
 });
});

谷歌“组合框示例”它可能会对您有所帮助。

于 2013-09-27T16:16:12.047 回答
0

为了结束这个问题,如果其他人想知道,我会回答我自己的问题。这是我发现的。

由于客户端和服务器之间关系的性质,实际上没有办法获取文本输入的值,将其存储在 ruby​​ 变量中,并与另一个 ruby​​ 变量进行检查。Ruby 脚本只运行一次然后被渲染,因此虽然 ajax 可能能够在后台持续运行并收集输入等,但在仅进行客户端交互时,与 ruby​​ 的集成不足。(如果我错了,请纠正我——毕竟,我发布问题是为了获得大家的意见!)

修复:我使用隐藏标签创建了一个开关。当表单加载时,隐藏的标签是空白的。提交表单后,更新操作会根据上个月的数字检查新输入数据的参数。如果条件检查,它保存。如果没有,它会重新加载带有消息的页面。如果消息被确认,ajax 命令将隐藏标签更改为“true”,一旦再次点击更新操作,它就会绕过比较。否则,不保存数据。问题解决了!

我正在将此作为社区 wiki 答案,以防有人想加两分钱。

于 2013-10-02T16:26:03.727 回答