2010-02-10 12 views
15

Tôi cần hộp kiểm "Tôi chấp nhận điều khoản dịch vụ" trên một trang, nó phải được kiểm tra để có thể tiến hành. Có vẻ như do đó không hợp lý để có một cột trong cơ sở dữ liệu để phù hợp với điều này (cho dù người dùng đã chấp nhận hoặc từ chối điều khoản).Hộp kiểm cho các điều khoản và điều kiện, không có cột trong cơ sở dữ liệu

Tôi đang sử dụng helper hình thức như thế này trong quan điểm của tôi:

<%= check_box("client", "terms") %> 

Và trong mô hình của tôi:

validates_acceptance_of :terms 

Tại thời điểm nó không làm việc ở tất cả.

Điều này có vẻ giống như một đoạn mã thực sự phổ biến, nhưng tôi không thể tìm thấy nó được sử dụng ở bất kỳ đâu mà không có các thuật ngữ trong mô hình. Khác tôi có thể sử dụng javascript để xác nhận nó, nhưng muốn giữ nó tất cả trong mô hình.

+0

Javascript có thể được tắt để bạn không thể dựa vào đó để xác thực. –

Trả lời

12

này sẽ làm việc tốt, mà không có một cột cơ sở dữ liệu hoặc attr_accessor: http://guides.rubyonrails.org/active_record_validations.html#acceptance

Tôi xin được nghiêng để kiểm tra băm params của bạn là như nó phải được tức là thuộc tính 'thuật ngữ' đã được thông qua trong 'khách hàng 'băm, có lẽ thử thêm raise params.inspect trên bộ điều khiển của bạn tạo hành động để giúp bạn gỡ lỗi?

+0

Chúc mừng, điều này làm việc tuyệt vời - và tôi đã học được một chút về degbugging! – vectran

+0

Liên kết đến Hướng dẫn Rails bị hỏng – CharlesJHardy

+0

Cố định liên kết - nhờ ChuckJHardy –

5

Điều gì về việc có một attr_accessor :terms trong mô hình Khách hàng của bạn?

+0

Cảm ơn! Điều này làm việc cho tôi vì tôi đã không bao gồm nó trong attr_accessor của tôi, do đó nó đã không được thông qua để xác nhận. –

0

Hoặc đi với giải pháp @ neutrino, hoặc để thiết lập lại: điều kiện để "không chấp nhận" nếu bạn cần để hiển thị lại hình thức (vì xác nhận có thể thất bại), sử dụng này:

def terms 
    nil 
end 

def terms=(val) 
    # do nothing 
end 
1

attr_accessor: thuật ngữ sẽ làm các trick độc đáo.

0

Tôi có điều này làm việc với các thiết lập này:

Trong controller, tôi đã thêm: terms_of_service như một lĩnh vực được phép:

def application_params 
    params.require(:application).permit(. . . , :terms_of_service) 
end 

Trong model:

attr_accessor :terms_of_service 
validates :terms_of_service, :acceptance => true 

Trong view:

<%= f.check_box("terms_of_service", :checked => false) %> 
Các vấn đề liên quan