중첩 된 두 가지 양식을 작성하려고합니다. 하지만 지금까지 발견 한 모든 자료는 기본 객체를 저장하는 방법, 중첩 된 객체를 추가하거나 제거하는 방법을 다루지 만 양식의 값으로 전체 목록을 저장하지는 않습니다. 이것을 할 수있는 방법이 있습니까?모든 중첩 된 양식 개체를 한 번에 저장
다음은 내가 함께 작업하고있는 모델입니다. 다른 구성 요소와 수량을 선택할 수있게 해주는 PC 구성 프로그램을 만들려고합니다. 그런 다음 바구니에 추가 할 것입니다.
그래서 저는 세 가지 모델로 작업하고 있습니다. Configuration, Configoption, Item
.
- 구성 모델
has_many :configoptions
- Configoption 모델
belongs_to :configuration
has_many :items
def range
a = []
b = self.quantity_rng.scan(/\w/)
b.each do |p|
a << p.to_i
end
return a
end
이
-
belongs_to :configoption
scope :sorted, order('items.position ASC')
이
아이디어는 모든 구성 옵션 세트를 가지고, 항목 모델 말을한다 5.이 5 가지 옵션 각각에 대해 가능한 많은 항목이있을 수 있습니다. 예를 들어 옵션 1은 프로세서, 2는 RAM 등이 될 수 있습니다.
는- 컨트롤러
def list
@configurations = Configuration.find(:all)
end
def show
@configuration = Configuration.find(params[:id])
@options = @configuration.configoptions
end
구성 -
<table>
<tr>
<th>Elements</th>
<th>Quantity</th>
</tr>
<%= form_for(:configuration, :remote => true) do |p| %>
<% @options.each do |option| %>
<tr>
<%= form_for(:option, :remote => true) do |f| %>
<% if option.items.count > 1 %>
<th id="<%= option.name %>"> <%= f.select option.name, options_from_collection_for_select(option.items.sorted, 'id', 'name')%></th>
<% else%>
<th id="<%= option.name %>"> <%= f.label(option.items[0].name) %></th>
<% end %>
<% if option.quantity_rng == nil %>
<th id="<%= option.name + "_qty" %>"> <%= f.label(option.quantity) %></th>
<% else%>
<th id="<%= option.name %>"> <%= f.select option.name, option.range, :selected => option.quantity%></th>
<% end %>
<% end %>
<% end %>
</tr>
<% end %>
</table>
지금까지 일들이 실제로 좋은 구성/쇼보기, 내가 옵션과 .range 방법으로 다른 항목을 줄 수는의를 저를 보자 "1,2,3"옵션에서 quantity_rng라고 말하고 필요할 경우 드롭 다운을 위해 전달 된 배열 [1,2,3]에 저장합니다.
하지만 이제는 내가 선택한 것을 실제로 바구니에 추가하는 중요한 부분이 있습니다. 사용자가 드롭 다운에서 조작 한 내용을 캡처하고 저장합니까 (configoptions 자체가 아니라 다른 곳에있는 새 객체로 저장합니까?)
BTW 나는 remote => true
을 사용하고 있습니다. jQuery의 유효성 검사 규칙은 나중에 한 번에 하나씩)
감사합니다.