2010-11-05 45 views
3

我有模型'人类',并且此模型具有整数属性:年龄
例如,我使用此整数属性的验证:年龄Rails 3.在表格中留下整数属性的错误值

当我添加新的“”与错误值:年龄(如“2aaa3”)是呈现我回来了错误,但它也被切断:年龄像“2” 。但我不想要它。我想留下最后的错误值“2aaa3”

所以,问题是“我该怎么做?”

回答

0

大家好,我对这个问题感兴趣。

我很高兴地说我自己创造了解决方案。 但我对此有几点评论。 ))

首先,该解决方案是:

class ApplicationController < ActionController::Base 
... 
... 
    after_filter :restore_int_value, :only => [:create, :update] 
... 
... 
    private 
... 
... 
    def restore_int_value 
    response.body = response.body.gsub(/(numeric.*<input id=")([^_]*)(_)([^"]*)(.*value=")(\d+)(")/){$1 + $2 + $3 + $4 + $5 + params[$2][$4] + $7} 
    end 
... 
... 
end 

其次,说明有:

1)溶液沿着这样的宝石如 'Formtastic' 和 'Simple_form' 的工作原理。这些宝石建立在详细的HTML包装形式,并给我们使用正则表达式的可能性。 如果你不使用这样的珍宝,你可以只是包装你的所有的整数属性,例如,在以“数字”类“P”标签像下面,我想我的解决方案会为这个工作太:

<p class="numeric"> <%= text_field(:human, :age) %> </p> 

2)我认为我的解决方案不适用于多模型形式的嵌套模型的整数域。 (Ryan Bates在“Advanced Rails Recipes”中描述了“在一种形式中处理多个模型”中的这类工作)。 但是,如果您阅读Ryan Bates的文章,您会看到他已经使用JavaScript。因此,在窗体中使用嵌套模型需要使用JavaScript。然后你可以使用JavaScript进行验证(就像Kunday所说的)。你不会有问题。 ;) 但是,如果你在表单中有固定数量的嵌套模型,并且不使用JavaScript,那么我认为你可以为你的需求创建新的特定正则表达式(类似于我创建的)。我希望你能用这个来管理。 ;)

我希望我已经涵盖了所有的情况下,你可以有这样的问题,我的解决方案将有助于除了我之外的人。 ;)

0

这是Rails中验证的默认行为。不知道是否有其他方式来覆盖它。但是,您可以使用javascript进行验证,这将比使用validates_numericality_of更多地体验用户体验。

+0

我知道这是默认的Rails验证行为。但我不喜欢它。 JavaScript是很好的解决方案,但只是一个额外的解决方案。如果用户的浏览器没有启用javascript支持,我认为验证应该在服务器上运行。不过谢谢你的答案。顺便说一下,我已经创建了一些解决方案并将其发布(如果您有兴趣)。 – shpakvel 2011-01-22 19:13:36