1

Rails 4 应用程序。

form_tag用于构建表单并想知道当表单不支持我的模型时处理和显示错误的典型方式(如果有的话)?

我发现的所有示例都与模型和典型@model.errors.any?视图条件有关,但这不适用于form_tag.

4

2 回答 2

2

你应该做的是:

首先包括 ActiveModel::Model

然后为您的属性制作访问器

最后为这些属性添加验证

例如,如果您有一个不想将其与数据库绑定的联系人模型

class Contact

  include ActiveModel::Model

  attr_accessor :name, :email, :message

  validates :name, presence: true
  validates :email, presence: true
  validates :message, presence: true, length: { maximum: 300 }
end

然后在您看来,您可以像使用习惯性的 activeRecord 模型一样遍历错误

if @model.errors.any?
   # Loop and show errors.... 
end
于 2013-10-16T15:55:12.170 回答
1

我建议在一个不表现模型但我们需要验证的类中包含 ActiveModel::Validations。例如,考虑一个 Ticket 类

导轨 4

class Ticket
  include ActiveModel::Model

  attr_accessor :title, :description

  validate_presence_of :title
  validate_presence_of :description
end

此外,如果您查看 Rails 4 activemodel/lib/active_model/model.rb 代码以更好地理解为什么在 rails 4 中“包含 ActiveModel::Model”仅足以使类表现得像模型,那么有关更多详细信息。

def self.included(base)
  base.class_eval do
    extend ActiveModel::Naming
    extend ActiveModel::Translation
    include ActiveModel::Validations
    include ActiveModel::Conversion
  end
end

导轨 3

class Ticket
  include ActiveModel::Conversion
  include ActiveModel::Validations
  extend ActiveModel::Naming

  attr_accessor :title, :description

  validate_presence_of :title
  validate_presence_of :description
end

您的 Ticket 类的行为类似于模型,使您可以使用这些方法进行错误验证

 Ticket.new(ticket_params)
 @ticket.valid?
 @ticket.errors
 @ticket.to_param

我希望它可以帮助你解决你的问题。

于 2013-10-16T16:02:30.693 回答