我需要什么 - 某种方式来获取输入到表单中的数字,以便在更新之前检查以前的记录,以便在发生验证错误时,可以提示用户在表单之前确认提交。 Params会起作用,但只在表单发布后返回 - 所以没有帮助。是否有一个ajax调用,我可以传递给ruby变量?或者某些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 %>
当我使用此代码时,我会将所有正常运行的代码存储到模型中 - 我只是在视图中进行测试。可以安全地假设此脚本调用的所有“自定义方法”都在运行。如果你需要他们的代码,我很乐意分享它。
Rails版本3.0.20
答案 0 :(得分: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
}
});
});
谷歌“组合框示例”它可能对您有帮助。
答案 1 :(得分:0)
为了解决这个问题,如果有人想知道,我会回答我自己的问题。这就是我发现的。
由于客户与客户之间关系的性质;服务器,实际上没有办法获取文本输入的值,将其存储在ruby变量中,并根据另一个ruby变量进行检查。 Ruby脚本只运行一次然后呈现,因此虽然ajax可能能够在后台连续运行并收集输入等,但在与客户端仅交互时,与ruby的集成不足。 (纠正我,如果我错了 - 毕竟,我发布了这个问题,以获得每个人的意见!)
修复:我使用隐藏标签创建了一个开关。加载表单时,隐藏标记为空白。提交表单后,更新操作会根据上个月的数字检查新输入的数据的参数。如果条件检查,它会保存。如果没有,它会重新加载带有消息的页面。如果消息已确认,则ajax命令会将隐藏标记更改为“true”,一旦再次点击更新操作,就会绕过比较。否则,不保存数据。问题解决了!
如果有人愿意加上他们的两分钱,我会把它作为社区维基的答案。