2011-08-23 27 views
7

Trong các tài liệu Formtastic, nó nói về cách thêm một dòng cho các lỗi cơ sở:Formtastic và cơ sở lỗi

<%= semantic_form_for @record do |form| %> 
    <%= form.semantic_errors :base %> 
    ...main body of form... 
<% end %> 

Nó puzzles tôi rằng Formtastic sẽ bao gồm hỗ trợ nỗ lực cho các lỗi lĩnh vực cụ thể nhưng theo mặc định, nó không cung cấp chỗ ở đó cho base. 1) Bạn có biết lý do là gì không?

2) Trong trường hợp của tôi, tôi muốn tất cả biểu mẫu của tôi bao gồm các lỗi cơ sở ngay sau khi biểu mẫu bắt đầu. Có cách nào cho tôi để có được formtastic để làm điều này bằng 'mặc định' cho tất cả các hình thức?

Trả lời

3

Trong Formtastic 2.x, semantic_errors LUÔN bao gồm: base.

Tuy nhiên, tôi đã nhận thấy trong Rails 3 (Tôi đang ở trong Rails 3.2) rằng thông báo lỗi từ xác thực không được lưu vào cơ sở nữa, thay vào đó được lưu trữ bởi thuộc tính. Ví dụ, với lớp này:

class User < ActiveRecord::Base 
    # has a name attribute 
    validates :name, :presence => true, :uniqueness => true 
end 

@ user.errors của bạn đối tượng trên không tạo/cập nhật sẽ trông như thế này:

#<ActiveModel::Errors:0x0000000 
    @base=#<User id:1, name: "">, 
    @messages={:name => ["can't be blank"]}> 

Nếu bạn đã thực hiện hình thức của bạn như thế này, nó sẽ xuất ra lỗi cho thuộc tính: name.

<%= semantic_form_for @user do |form| %> 
    <%= form.semantic_errors :name %> 
    ...main body of form... 
<% end %> 

Đây là ví dụ mô phỏng, nhưng bạn hiểu ý tôi là gì.

Thật không may, không có gì trong codebase formtastic hiện hỗ trợ một "tất cả" tùy chọn với Rails 3 (một lần nữa, tôi đang sử dụng Rails 3.2)

12

Nếu bạn muốn hiển thị tất cả các lỗi cơ sở cùng với bất kỳ và tất cả lỗi của thuộc tính lồng nhau:

f.semantic_errors *f.object.errors.keys

trả lời từ: https://github.com/gregbell/active_admin/pull/905

Các vấn đề liên quan