【问题标题】:Is it possible to do validation on a form item that isn't part of the model?是否可以对不属于模型的表单项进行验证?
【发布时间】:2009-11-12 23:16:25
【问题描述】:

所以我有一个注册表单,其中一部分是帐单/信用卡信息。该信息全部由第三方应用程序存储和处理,因此数据不会存储在我们的数据库中。

那么我怎样才能通过 Rails 中的 validates_ 方法运行这些项目呢? (validates_presence_ofvalidates_length_of 等)

还是我在错误的地方对这些项目进行验证?

【问题讨论】:

    标签: ruby-on-rails validation


    【解决方案1】:

    对于正在使用 Rails3 的未来读者,请查看 ActiveModel:

    require 'active_model'
    
    class Place
      include ActiveModel::Validations
      validates_presence_of :name
      attr_accessor :name
    end
    

    【讨论】:

      【解决方案2】:

      您可以创建一个虚拟模型来方便您的表单信息。不需要将模型保存到数据库。

      只需在 app/models 中创建一个新文件就可以了。

      示例:app/models/ccinfo.rb

      class Ccinfo < ActiveRecord::Base
      
        attr_accessor :card_type, :card_number, :pin, :exp_month, :exp_date, :card_holder, ...
      
        validates_presence_of :card_holder
        ...
      
      end
      

      如果表单基于另一个模型,您只需将上述模型的内部移动到表单所基于的模型中,效果完全相同。

      您可以通过调用 valid? 来验证而不保存。方法。如果有效,像使用任何其他模型一样呈现错误?返回假。否则继续处理。

      【讨论】:

        【解决方案3】:

        是的,我相信可以做到这一点

        例如

         class User < ActiveRecord::Base
             attr_accessor :card_number
             validates_presence_of :card_number
         end
        

        您需要在模型本身中创建属性,然后对其应用验证。

        您也可以编写自己的访问器,像这样将数据发送给第三方

           class User < ActiveRecord::Base
           attr_accessor :card_number
           validates_presence_of :card_number
        
               def card_number=(number)
                 .....
               end
           end
        

        【讨论】:

          猜你喜欢
          • 2017-07-02
          • 2011-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-18
          • 1970-01-01
          • 2021-10-27
          • 1970-01-01
          相关资源
          最近更新 更多