我在Rails 4应用程序中使用Simple_form。
如何在与模型无关的视图中显示错误消息?
我希望得到与基于模型的其他视图相同的结果。
目前,这是视图中的代码:
<%= simple_form_for(:registration, html: { role: 'form' }, :url => registrations_path) do |f| %>
<%= f.error_notification %>
<%= f.input :name, :required => true, :autofocus => true %>
<%= f.input :email, :required => true %>
<%= f.input :password, :required => true %>
<%= f.input :password_confirmation, :required => true %>
<%= f.button :submit %>
<% end %>
在“普通”视图中(即使用模型),行<%= f.error_notification %>
显示错误。
我应该在控制器中做些什么来初始化Simple_form用来显示错误的内容?
由于
答案 0 :(得分:5)
简单表单不支持此功能&#34;开箱即用&#34;。但你可以添加一个&#34;猴子补丁&#34;在像这样的初始化器(免责声明 - 这似乎适用于我的简单测试用例,但尚未经过彻底测试):
// Put this code in an initializer, perhaps at the top of initializers/simple_form.rb
module SimpleForm
module Components
module Errors
def has_errors?
has_custom_error? || (object && object.respond_to?(:errors) && errors.present?)
end
def errors
@errors ||= has_custom_error? ? [options[:error]] : (errors_on_attribute + errors_on_association).compact
end
end
end
end
module SimpleForm
class ErrorNotification
def has_errors?
@options[:errors] || (object && object.respond_to?(:errors) && errors.present?)
end
end
end
然后您可以像这样在表单中添加错误(请注意,您可以通过设置&#39;错误来指示是否显示错误通知:true&#39;,您必须执行自己的检查以确定是否存在出现错误,并动态添加错误):
=simple_form_for :your_symbol do |f|
=f.error_notification errors: true
=f.input :item1, as: :string, error: "This is an error on item1"
=f.input :item2, as: :string, error: "This is an error on item2"
答案 1 :(得分:0)
simple_form_for
助手必须包装模型。但仅仅因为我们说这并不意味着它必须是一个由数据库表支持的ActiveRecord模型。您可以自由创建不受数据库支持的模型。在Rails 3+中,执行此操作的方法是让您的类包含ActiveModel
所需的组件。 This SO post通过一个例子解释了如何做到这一点(我确信还有很多其他的)。获得包含ActiveModel::Validation
的模型后,您可以添加到errors
集合,然后f.error_notification
语句将输出您在表支持的模型中习惯的错误。
TL; DR:创建一个非ActiveRecord,非表支持的模型,然后将其视为常规的旧模型,表单应该做正确的事。
答案 2 :(得分:0)
使用client_side_validations gem,它很简单,而且你只能这样做 -
<%= simple_form_for(:registration, html: { role: 'form' }, :url => registrations_path) , :validate => true do |f| %>
但您还需要在模型中添加验证。