2012-05-03 2 views
2

에 역 4 개 음료를 추가 : 스테이션 & 음료내가 두 가지 모델이 양식

역 has_many : 음료와 음료 belongs_to : 방송국

나는 당신이를 만들 때 수 있도록 내 양식을 만들려고 해요 역에서, 당신은 그 역에 속할 것입니다 4 음료를 선택할 수 있습니다.

원래 형태 :

<%= semantic_form_for [:admin, @station] do |f| %> 
<fieldset class="inputs"> 
    <ol> 
     <%=f.input :name %> 
     <%=f.input :number, :as => :number %> 
    </ol> 
</fieldset> 
<%= f.buttons :commit %> 

난 당신이 음료 # 1, # 2를 선택할 수 있도록이 양식 4 (선택) 입력 필드를 만드는 방법을 알아 내기 위해 노력했습니다, # 3 , # 4 현재 스테이션. 어떤 아이디어?

나는 현재 accepts_nested_attributes_for :drinks, :allow_destroy => true.

음료를 belongs_to을 시도하고있다 : 역

id | name | station_id | 

스테이션 has_many을 : 음료

id | name | 

.

바와 같이 tihm 아래 언급 UPDATE, 당신이 자신의 값을 4 개 음료를 추가하고 편집 할 수 있습니다

<% f.fields_for :drinks do |drink_form| %> 
      <%# Put your inputs here...could be a select box %> 
      <%= drink_form.select :name, [['Drink #1', 'drink_1'],['Drink #2', drink_2] %> 

      <%# Or a plain input %> 
      <%= drink_form.input :description %> 

      <%# ... Any other drink attributes ... %> 
     <% end %> 

을하지만, 난 할 노력하고있어 각 목록 네 개의 선택 상자를 생성하는 것입니다 Drink.all과 하나의 음료수 개체를 다른 음료수 개체로 바꿀 수 있어야합니다. 따라서 첫 번째 선택 상자의 값을 콜라에서 pepsi로 변경하면 콜라에서 station_id가 제거되고 station_id가 pepsi에 추가됩니다.

음료 속성을 편집 할 필요가 없습니다.이 스테이션과 관련된 음료를 변경하면됩니다. 동일한 형태로 가능합니까?

답변

1

불행히도 "최선의 연습"레일 방법을 찾을 수 없어서 구현하기 위해 AJAX/사용자 정의 루비 코드를 여러 번 사용했습니다. 여기에 (아마도 다른 사람을 도울 것입니다) :

<% @drinks = Drink.all %> 
    <fieldset class="inputs"> 
     <ol> 
     <% @station.drinks.each_with_index do |d,i| %> 
      <li> 
       <label class="label" for="station_name">Item</label> 
       <%=select("drink", "id", @drinks.collect { |d| [d.name,d.id] }, {:include_blank => true, :selected => d.id}, {:class => "station-items"})%> 
      </li> 
     <% end %> 
     <% m = [email protected] %> 
     <% m.times do %> 
      <li> 
       <label class=" label" for="station_name">Item</label> 
       <%=select("drink", "id", @drinks.collect { |d| [d.name,d.id] }, {:include_blank => true}, {:class => "station-items"})%> 
      </li> 
     <% end %> 
     </ol> 
    </fieldset> 
    <%= f.buttons :commit %> 
<% end %> 

<script>  
$(".station-items").on("change",function(){ 
    var node = $(this) 
    , prev = node.attr('data-rel') 
    , next = parseInt(node.val()) 
    , station_id = $("#station_id").val() 

    if(next) { 
    $.ajax({ 
     url: "/drinks/"+next+".json", 
     type: "PUT", 
     data: { id:next, "drink[station_id]":station_id } 
    }); 
    } 

    if(prev) { 
    $.ajax({ 
     url: "/drinks/"+prev+".json", 
     type: "PUT", 
     data: { id:prev, "drink[station_id]":"" } 
    }); 
    } 

    $(this).attr('data-rel',next); 
}); 

$('.station-items option:selected').each(function(){ 
    return $(this).parent().attr('data-rel',$(this).val()) 
}); 
</script> 
1

당신은보고하여 시작하는 것이 좋습니다 :

당신은 항상 4 이하해야합니다 알고 있다면, 그것은 좀 더 쉽게 그리고 당신은 할 수 Railscasts에서 js를 건너 뜁니다. 컨트롤러에서

, 당신이 필요로하는 빈 음료 오브젝트를 구축해야합니다 :

.... 
@station = Station.new 
4.times do 
    @station.drinks.build 
end 
... 

이 방법은 뷰의 #fields_for는 반복하는 객체를 가지고있다. 보기에 뭔가 이케는 :

<%= semantic_form_for [:admin, @station] do |f| %> 
<fieldset class="inputs"> 
    <ol> 
     <%=f.input :name %> 
     <%=f.input :number, :as => :number %> 
     <% f.fields_for :drinks do |drink_form| %> 
      <%# Put your inputs here...could be a select box %> 
      <%= drink_form.select :name, [['Drink #1', 'drink_1'],['Drink #2', drink_2] %> 

      <%# Or a plain input %> 
      <%= drink_form.input :description %> 

      <%# ... Any other drink attributes ... %> 
     <% end %> 
    </ol> 
</fieldset> 
<%= f.buttons :commit %> 

#select 당신이에서 선택하는 것에 많은 해당 데이터의 구조를 따라 달라집니다. 모델, 간단한 목록 등에서 오는 것입니까?

+0

일반 Rails 앱에서 잘 작동합니다. 또한 Active Admin (필요한 경우도 있음)과 함께 사용할 솔루션을 찾고 있다면 https://github.com/gregbell/active_admin/issues/59에서 문제가 해결되었습니다. –

+0

좋아, 처음에 나는 이것이 내가 필요한 것이라고 생각했다. 그러나, 그것보다 조금 까다 롭습니다. 위에서 지정한 내용으로 방송국과 관련된 4 가지 음료의 내용 (이름, 설명 등)을 편집 할 수 있습니다. 그러나 포인트 1에서 ACTUAL 음료를 교환 할 수 있어야합니다. 예를 들어 펩시 콜라에서 음료 # 1의 이름을 편집하는 대신 펩시 오브젝트에서 코카인 오브젝트로 음료를 바꿔야합니다. –

+0

더 명확하게하기 위해 질문을 수정하겠습니다. –

관련 문제