用于form_tag表单的Rails错误数组

时间:2013-10-16 15:39:52

标签: ruby-on-rails forms ruby-on-rails-4

Rails 4 app。

使用form_tag构建表单并想知道在表单没有备份我的模型时处理和显示错误的典型方式(如果有的话)?

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

Rails 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”仅足以使类的行为类似于模型。< / p>

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

Rails 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

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