2010-06-06 59 views
1

我想知道如何在rails中进行表单验证。具体来说,这是我想要做的:在窗体中的JavaScript表单验证?

该表单让用户从下拉菜单中选择一个项目,然后输入一个数字。使用RJS,记录立即显示在表格下方的表格中。使用AJAX重置表单不成问题。

问题是,我不希望人能够从该下拉菜单中选择相同的项目两次(至少在一天内)。没有使用ajax,这不是问题(因为我目前对select语句有一个函数),但是现在页面没有重新加载,我需要一种方法来确保人们无法在一天内两次添加相同的项目。

这就是说,有没有一种方法可以使用一些javascript/ajax验证来确保在创建副本之前在同一天内没有提交过相同的记录?

在此先感谢!

埃利奥特

回答

2

至于表单验证,为您的特殊逻辑,你会希望你的模型覆盖#validate。请参阅文档ActiveRecord::Validations#validate

最好的办法是“确保人们无法在一天内两次添加相同的物品”,而不是向用户提供他们无法选择的选项。当您的控制器为视图准备数据时,将逻辑过滤掉用户不应该拥有的任何选项(即那些他们当天已经选择的选项)。或呈现它们,但将它们作为选项禁用(使它们变灰)。如果用户可以在一个请求中两次选择相同的选项,那么您需要一些JS在服务器POST之前进行客户端验证。

+0

嘿克里斯,我使用ajax,所以页面不刷新。意味着第一次添加记录时,选项应该第二次不同。但是控制器不能在两者之间访问。 – Elliot 2010-06-06 20:30:28

+0

控制器在两者之​​间访问,它只是处理ajax请求。您的模型应该使用#validate处理验证。如果验证失败,您的控制器需要发送一个ajax响应,并用错误消息更新视图。否则,请让控制器发送一个新选项列表,您可以使用该选项更新用户的选择。 – Chris 2010-06-06 20:37:59