2010-02-15 36 views
10

Tôi đang tạo ứng dụng Rails và tôi có một kiểu gọi là User. Trong mô hình này tôi có một giá trị boolean gọi là isagirl. Người dùng phải chỉ định nếu đó là một cô gái hay không, được thực hiện bởi hai nút radio. Trong mô hình của tôi, tôi có điều này:validates_presence_of +: thông báo hiển thị tên của trường

validates_presence_of :isagirl, :message => "You must be either a Boy or a Girl. If not, please contact us." 

Tuy nhiên, khi tôi không chỉ định một quan hệ tình dục, tôi thấy điều này:

Isagirl Bạn phải là một con trai hay một cô gái.

làm thông báo lỗi. Vấn đề là 'Isagirl' không được ở đó trong thông báo lỗi. Làm thế nào tôi có thể vô hiệu hóa điều đó? Và không, bằng cách sử dụng CSS để ẩn nó là không có tùy chọn.

Cảm ơn

+4

cho giá trị của nó, bạn nên hỗ trợ giới tính không nhị phân dưới dạng nếu có thể –

Trả lời

8

Cách tôi thực hiện việc này là xuất thông báo mà không có tên trường. Ví dụ, tôi có một phần mà kết quả đầu ra các thông báo lỗi sau khi xác nhận không thành công.

<ul> 
    <% errors.each do |attribute, message| -%> 
     <% if message.is_a?(String)%> 
      <li><%= message %></li> 
     <% end %> 
    <% end -%> 
</ul> 

Lưu ý rằng điều này không xuất ra thuộc tính. Bạn chỉ cần đảm bảo rằng tất cả thư của bạn có ý nghĩa mà không có tên thuộc tính.

+0

Được rồi, nhưng mã đó biết bạn muốn biểu mẫu nào? –

0

Tôi không biết làm thế nào để bỏ qua tên thuộc tính trong hàm validates_presence_of (nó có thể đau đớn mà không hack bẩn) nhưng tôi sẽ sử dụng chức năng Validate để đạt được những gì bạn muốn:

protected 
    def validate 
     errors.add_to_base("You must be either a Boy or a Girl. If not, please contact us.") if params[:isagirl].blank? 
    end 

tôi đã sử dụng đặc biệt phương pháp trống? ở đây vì validates_presence_of đang sử dụng trống? cho thử nghiệm bạn sẽ nhận được hành vi tương tự này.

add_to_base đang thêm các thông báo lỗi chung không liên quan đến các thuộc tính và điều này giúp bạn không bị hack chế độ xem.

5

Trong một trong các dự án của tôi, tôi đã sử dụng plugin custom-err-msg. Với nó khi bạn chỉ định thông báo lỗi như sau:

:message => "^You must be either a Boy or a Girl. If not, please contact us." 

(thông báo ^ vào lúc bắt đầu) nó sẽ không in tên thuộc tính khi in lỗi. Và bạn có thể sử dụng người trợ giúp tiêu chuẩn error_messages hoặc error_messages_for.

+0

trả lời cho câu trả lời :) – bharath

+0

FYI, đá quý này hiện được gọi là 'custom_error_message' và có sẵn tại đây: https://github.com/jeremydurham/custom-err-msg – Martin

0

Tôi khuyên bạn nên sử dụng tùy chọn errors.add_to_base. Không biết bố cục của bạn trông như thế nào, đó sẽ là cách đơn giản nhất để hiển thị thông báo lỗi đơn giản.

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