2012-12-19 2 views
1

나는 큰지고있어 상관없이 다른 모든이 형태의 검증하지만, 인라인 오류 메시지를 내가 시도해보십시오, 나는이 체크 박스에 대한 제출을 명중 한 후에 어떤 메시지도 나타나지 않는 것 같습니다. 양식을 확인하기 전까지 양식이 제출되지 않으므로 유효성 검사가 작동하지만 사용자에 대한 피드백을보고 싶습니다.: assocation를 통해 레일 3 AJAX 형태로, client_side_validations 보석으로

내 모델 (벗었) : 내보기에

class Resource < ActiveRecord::Base 
    attr_accessible :objective_ids 

    has_many :obsources, :dependent => :destroy 
    has_many :objectives, :through => :obsources 

    validates_presence_of :objective_ids, :message => "Must check at least one" 
end 

class Objective < ActiveRecord::Base 
    has_many :obsources, :dependent => :destroy 
    has_many :resources, :through => :obsources 
end 

양식은 (벗었) :

이 이
<%= simple_form_for @resource, remote: true, :validate => true, :html => { :id => "resource-form#{@resource.skill_id}" } do |f| %> 
    <%= f.hidden_field :skill_id, :value => @resource.skill_id %> 
    <%= f.association :objectives, :label => "Objectives Targeted (at least 1)", :collection => Skill.find("#{@resource.skill_id}").objectives, :as => :check_boxes, :label_method => lambda { |objective| "#{objective.content}" } %> 
    <%= f.submit %> 
<% end %> 
이 이

생각이 많이 주시면 감사하겠습니다!

답변

0

그리고 ... 나는 그것을 알아 냈다. 나는 여전히 내 checkbox에 대한 에러를 던지기 위해 client_side_validations를 얻을 수는 없지만, 내 컨트롤러가 동일한 create.js.erb를 렌더링하도록함으로써 폼을 제출하려고 시도 할 때 나타나는 에러를 성공적으로 저장했는지 여부에 관계없이 나타낼 수있다. 다음과 같이, 거기에 오류 메시지가 나타납니다 : 오류가 다른 모든 검증과 같이, 인라인 표시하도록

<% if @resource.errors.any? -%> 
    $('#objective-errors<%= @resource.skill_id %>').empty(); 
    $('#objective-errors<%= @resource.skill_id %>').prepend('<%= j render("errors") %>'); 
<% else %> 
    // Whatever you want to happen on successful save 
<% end %> 

가 나는 또한 오른쪽의 체크 박스 후에 목적-오류 ID로 빈 범위를 추가 오류. 이것은 약간 지저분한 일이지만 client_side_validations가 저장이 시도되기 전에 다른 모든 것이 유효성이 확인되도록하기 때문에 일이 일어납니다. 따라서 실패한 저장 이후에 반환 된 유일한 오류가 저의 목적을 위해 발생합니다. 내가 체크 박스의 또 다른 세트를 추가 할 때까지

그래서,이 위대한 작품! (비록 내가 그렇게해도 적절한 체크 박스 목록 옆에 메시지를 걸러내는 것이 너무 어렵지 않아야한다.)

0

가치가있는 (4.5 년 후), 나는 약간의 해킹을 발견했다. 이. 필자의 경우, 체크 박스는 사용자가 동의 할 때까지 동의해야한다는 면책 조항이었다. 체크 박스를 체크하고 체크하지 않으면 실제로 값이 변경되지 않고 클라이언트 측 유효성 라이브러리가 입력 값을 사용하기 때문에 모델 레벨 유효성 검사를 추가하고 jQuery에서 입력 값을 변경했습니다. 클라이언트 측 유효성 검사 라이브러리를 트리거합니다. 보기에 JS에서,

validates :field, inclusion: { in: [ true, 'true' ] } 

다음 : 해킹의

// For active toggling of checkbox 
$('input#reference_finalization_referee_available').click(function() { 
    if($(this).is(':checked')){ 
     $(this).val('true') 
    } else { 
     $(this).val('false') 
    } 
}); 

// On page load 
if ($('input#reference_finalization_referee_available').is(':checked')) { 
    $(this).val('true') 
} else { 
    $(this).val('false') 
} 

종류,하지만 트릭을 수행 내 모델에서

, 나는 덧붙였다.

관련 문제