2012-01-05 2 views
0

** 안녕하세요 여러분 모두 사용자가 세부 정보를 삽입 할 수있는 주소록을 하나 만들려고합니다.양식에 동적으로 생성 된 필드를 데이터베이스 레일에 추가하는 방법

  1. 사용자는 양식에서 자신의 정보를 삽입 할 수 있습니다. 사용자가 가정 및 개인 유형 일 수있는 것처럼 정보를 1 개 이상 추가하려면 동적 필드를 제공합니다. 내 쿼리 레일의 형태로 그 동적 값을 결합하고, DB에 데이터를 제출하는 방법입니다. **

내 모델은 정보 유형 정보 이름과 정보 데이터 이있는 데이터를 가지고 할 수있는 사용자처럼 예를 들어 사용자가 정보 유형 = 수 infoname = homePhone를의 infodata를 삽입 할 수 = 23623623 사용자가 그는 내가 지금이

<%= form_for @client_info, :validate => true do |f|%> 
<% if @client_info.errors.any? %> 
<div id="error_explanation", class="alert-message Warning"> 
    <h2><%= pluralize(@client.errors.count, "error") %> Occured</h2> 
    <ul> 
     <% @client.errors.full_messages.each do |msg| %> 
     <li> 
      <%= msg %> 
     </li> 
     <% end %> 
    </ul> 
</div> 
<% end %> 
<select id = "opts" > 
    <option value = "0">Select Option</option> 
    <option value = "1">Phone Number</option> 
    <option value = "2">Address</option> 
    <option value = "3">Date</option> 
    <option value = "4">Email</option> 
    <option value = "5">Link</option> 
</select> 
<form> 
    <div id="ap"></div> 
</form> 
<script type="text/javascript"> 
    $(document).ready(function() { 

     $("#opts").change(function() { 
      if($("#opts").val() == ("1")) { 
       $("#ap").append('<div id="phn"><select id ="phn"><option>Personal</option><option >Home</option><option >Custom</option></select> <input type ="text" id="ad"></input>' + '<a href="#" class="remove1" id="rm" >Remove</a></div>'); 
      } 
      if($("#opts").val() == ("2")) { 
       $("#ap").append('<div id= "add"><select id ="add"><option>Home Address</option><option >Work Address</option><option >Custom</option></select> <textarea rows="2" cols="20"></textarea>' + '<a href="#" class="remove2" id="rm" >Remove</a></div>'); 
      } 
      if($("#opts").val() == ("3")) { 
       $("#ap").append('<div id ="date"><select id ="date"><option>Birthday</option><option >Anniversary</option><option >Custom</option></select> <input type ="text" id="datepic" ></input>' + '<a href="#" class="remove3" id="rm" >Remove</a></div>'); 
      } 
      if($("#opts").val() == ("4")) { 
       $("#ap").append('<div id ="email"><select id ="email"><option>Home Email</option><option >Work Email</option><option >Custom Email</option></select> <input type ="text"></input>' + '<a href="#" class="remove4" id="rm" >Remove</a></div>'); 
      } 
      if($("#opts").val() == ("5")) { 
       $("#ap").append('<div id="link"><select id ="link"><option>Profle</option><option >Blog</option><option>Homepage</option><option>Custom</option></select> <input type ="text"></input>' + '<a href="#" class="remove5" id="rm" >Remove</a></div>'); 
      } 

     }); 
     $('.remove1').live('click', function() { 
      $("#phn").remove(); 
      return false; 
     }); 

    }); 

</script> 
<div class="actions"> 
    <%= f.submit :class => "btn primary" %> <a href="<%= clients_path %>" class="btn">Cancel</a> 
</div> 
<% end %> 

처럼 그 일을하고 다른 type.Please 도움
의 원하는 많은 숫자를 삽입 할 수 있습니다 내가 이 html 생성 된 필드를 내 레일에 추가하고 싶습니다. 양식?

답변

0

모든 입력이 매개 변수로 전달되므로이를 통해 루프를 반복하여 컨트롤러에서 생성 작업을 실용적인 방법으로 저장할 수 있습니다.

0

이 같은 일대 그들 사이의 관계, 뭔가 별도의 모델 번호를 넣어 것입니다 : 당신이 할 수있는 그런

class User 
    has_many :user_infos 
end 

class UserInfo 
    belongs_to :user 

    # attributes: 
    # user_id (what user this info belongs to) 
    # type (could be Number, Email, whatever) 
    # name (an identifier like "home phone", "work email" etc) 
    # data (the actual value) 
end 

가 방금 UserInfo 모델 컨트롤러를 추가 할 수 있습니다 사용자에게 정보를 추가하십시오.

+0

나는 단지 하나의 모델 파일만으로이 작업을 수행하고 있습니다. 답답했습니다. –

+0

다음은 문서 기반 데이터베이스 (예 : mongodb)와 같이 더 적합한 데이터베이스 엔진을 사용하는 것 같습니다. , 또는 user_infos의 직렬화 된 배열을 사용자 모델의 텍스트 필드에 저장하면됩니다. 두 번째 옵션은 "숫자로 검색"기능 또는 이와 유사한 기능을 구현하려고하면 다소 지저분 해집니다. – Frost

+0

안녕하세요 마틴 제 코드를 다시 한 번 살펴보고 코드를 추가하고 약간의 변경을 할 수 있습니까? –

관련 문제