Rails 4 app。
使用form_tag
构建表单并想知道在表单没有备份我的模型时处理和显示错误的典型方式(如果有的话)?
我发现的所有示例都与模型和典型的@model.errors.any?
视图有关,但这不适用于form_tag
。
答案 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
我希望它可以帮助你解决问题。