2012-08-04 2 views
3

Ajax를 사용하여 범주를 만들려고 할 때 내 오류 메시지와 함께 이상한 동작이 발생합니다.내 자신의 오류 html 자체를 두 번 렌더링 변경하는 방법?

은 지금은 내 오류 메시지가 같이 나타나는 있습니다

enter image description here

내 create.js.erb 및 new.js.erb 모두는이 라인 같은 코드가 있습니다

을 여기
<%= form_for(@category, :remote => true, :html => { :class => "add-form", :id => "cform" }) do |f| %> 
<fieldset> 
    <p> 
     <%= f.label :name, "Category Name *" %> 
     <br /> 
     <%= f.text_field :name %> 
    </p> 
    <div class="form-actions"> 
    <%= f.submit "Create" %> 
    </div> 
</fieldset> 

이 전자 수있는 코드 :

$(".cc-form").html("<%= escape_javascript(render(:partial => 'categories/form', locals: { category: @category })) %>"); 
내 카테고리 형태이다 네이블 사용자 지정 오류 HTML :

# application.rb 

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance| 
    errors = Array(instance.error_message).join(',') 
    %(#{html_tag}<span class="validation-error">&nbsp;#{errors}</span>).html_safe 
end 

다음 오류 HTML과 함께 HTML 자체 :

<p> 
    <label for="category_name">Category Name *</label><span class="validation-error">&nbsp;can't be blank</span> 
    <br> 
    <input id="category_name" name="category[name]" size="30" type="text" value=""><span class="validation-error">&nbsp;can't be blank</span> 
</p> 

가 난 단지 옆에 label에 아닌 오류 메시지가 input의 오른쪽을합니다. 어떻게하면 좋을까요? 내가 그것을 볼 때 형식이 나에게는 까다 롭습니다.

감사합니다.

+1

카테고리 및 양식 부분은 어떻게 보입니까? – Dogbert

+0

@Dogbert 저기 있습니다. 나는 그것을 게시했다. – LearningRoR

+0

실수로 jQuery를 두 번 포함했을 수도 있습니다. –

답변

1

생각 엔 당신이 심하게 field_error_proc를 사용 : 여기에 링크의 몇 가지 있습니다. Field_error_proc은 참조 객체 (:name 즉 오류 배열이있는 category.name을 의미)가 동일하므로 레이블 및 입력 태그에 모두 field_with_error 태그를 지정합니다. 이 경우에는 라벨의 색상을 빨간색으로 변경하는 것이 좋기 때문에 결함이 아닙니다. Rails 코드 (actionpack/lib/action_view/helpers/tags/label.rb)를 확인했는데 레이블 (이 기능 요구 일 수 있음)에 대해이 동작을 해제 할 수 없으므로 레이블에 일반 html을 사용하는 경우 문제점에 대한 해결책은 하나만있는 것 같습니다. 보기에

  • 대신 사용

    <label for="category_name">Category Name *</label>

    <%= f.label :name, "Category Name *" %>

    의 :

    나는 당신의 문제에 대한 지금 두 가지 솔루션이있다.

  • 스타일 시트 파일에 form .label .validation-error { display: none }을 입력하면 f.label을 사용할 수 있습니다.나는 그것이 단지 해결 방법이라는 것을 알고 있지만, f.label이 필요하다면, 나는 더 나은 해결책을 모른다.

+0

또는이 게시물의 field_error_proc에서 html 태그를 확인할 수 있습니다. http://stackoverflow.com/questions/8023548/overriding-actionviewbase-field-error-proc-in-refinerycms – Nucc

0

당신은 페이지에서 이러한 <span> 태그의 두 가지가 있습니다

<span class="validation-error">&nbsp;can't be blank</span> 

편집 : 라벨과 입력이 모두 사용자 지정 오류로 포장 할 필요가 같은

좋아, 그것은 보인다. 이 특별한 클래스 요소로 입력 필드를 포장하는 것이 좋다 때문에

http://stackoverflow.com/questions/5267998/rails-3-field-with-errors-wrapper-changes-the-page-appearance-how-to-avoid-t

https://gist.github.com/1464315

+0

그것이 렌더링 방법입니다. 라벨로만 오류 HTML을 어떻게 변경합니까? 오류 html은 나에게 혼란 스럽습니다. – LearningRoR

+0

두 번째 태그를 제거 할 수 없습니까? 두 가지 똑같은 범위가 있기 때문에 자바 스크립트 및/또는 CSS가 변경 한 사항에 영향을받습니다. 다른 ID 또는 클래스를 제공해야합니다. – jn29098

+0

오, 기다려. Rails는 이러한 태그 중 두 가지를 렌더링합니다. 그 맞습니까? – jn29098

관련 문제