2013-11-22 2 views
0

Ruby 2 and Rails 4를 실행하는 웹 응용 프로그램과 매우 복잡한 형식이 있습니다. 내가 뭘 하려는지 중첩 된 양식을 체인 된 선택과 결합합니다. 문제는 중첩 된 리소스에 대한 필드가 즉석에서 만들어지고 날짜와 시간의 고유 한 조합이 주어 지지만 내 자바 스크립트에서는 어떤 셀렉션이 다른 셀렉션에 연결되는지 정의해야합니다. 나는 내 개념에 사용RoR 중첩 형식에서 체인 선택을 구현하는 방법은 무엇입니까?

두 개의 튜토리얼이 있습니다 http://homeonrails.blogspot.de/2012/01/rails-31-linked-dropdown-cascading.html http://railscasts.com/episodes/196-nested-model-form-revised

그러나 중요한 코드는 세 개의 서로 다른 파일에 기본적으로 하나는 다른 선택이 될 수

$(document).ready(function(){ 
    $('select#device_name').chainedTo('select#room_name'); 
    }); 

이 체인 양식 서식 파일 또는 field_partial에서 렌더링됩니다.

도우미 방법은 다음과 같습니다

def link_to_add_fields(name, f, association) 
    new_object = f.object.send(association).klass.new 
    id = new_object.object_id 
    fields = f.fields_for(association, new_object, child_index: id) do |builder| 
     render(association.to_s.singularize + "_fields", f: builder) 
    end 
    link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")}) 
    end 

그리고 마지막으로 커피 스크립트

jQuery -> 
    $('form').on 'click', '.remove_fields', (event) -> 
    $(this).prev('input[type=hidden]').val('1') 
    $(this).closest('fieldset').hide() 
    event.preventDefault() 

    $('form').on 'click', '.add_fields', (event) -> 
    time = new Date().getTime() 
    regexp = new RegExp($(this).data('id'), 'g') 
    $(this).before($(this).data('fields').replace(regexp, time)) 
    event.preventDefault() 

그래서,이 어떻게 작동하는지에 대한 이해 내가 버튼을 클릭 즉, 도우미 메서드는 새로운 연결을 만들고, id를 가져오고, 부분에서 html을 렌더링하며, 커피 스크립트는 객체의 id를 현재 날짜 시간으로 바꿉니다. 그래서 동일한 ID를 사용하지 않고 여러 연관을 추가 할 수 있습니다.

질문은 선택 상자의 ID를 얻으려면 체인 된 함수의 javascript를 변경하는 방법이 될 것입니다. 왜냐하면 지금부터는 날짜 상자에서 날짜 시간을 받아들이는 동적 자바 스크립트를 만드는 방법을 모르기 때문입니다. coffescript 또는 javascript가 그들을 검색하고 자체를 변경하게하십시오.

도움이나 의견을 보내 주시면 감사하겠습니다.

답변

0

아, 예상대로 용액이 더 쉬웠다. 다음 명령을 사용하면 중첩 된 자원의 자식 인덱스를 얻을 수 있습니다 :

<%= f.object_name.gsub(/[^0-9]+/,'') %> 

을 그리고이 지수는 서로 체인에 자바 스크립트에 두 가지 선택을 통과 할 수 있습니다

$(document).ready(function(){ 
    $('select#device_attributes_<%= f.object_name.gsub(/[^0-9]+/,'') %>_name').chainedTo('select#room_attributes_<%= f.object_name.gsub(/[^0-9]+/,'') %>_name'); 
    }); 
관련 문제