연결된 개체에 대해 네 개의 중첩 된 필드 집합이있는 양식을 표시하고 싶습니다. 내가 찾은 유일한 방법은 initialize
메서드 를 재정의하고 네 가지 연결을 정의하는 것입니다.
루비
def initialize(attributes = {})
super
4.times { items << Item.new }
end
그런 다음 일반적으로 중첩 필드를 표시합니다.
HAML
= f.fields_for :items do |item|
= render 'item_fields', f: item
이미 존재하고 관련 항목 수가 적은 개체를 편집하려고하면 작동하지 않습니다.
어떤 도움을 주시면 감사하겠습니다.
Order has_many items
OrderSet has_many orders
주문은 cocoon
보석을 통해 추가됩니다 (각 세트에 주문이 하나 이상 있음).
각 주문에는 항상 4 개의 항목이 있어야합니다. 그러나 항목이 적을 때는 빈 레코드를 저장하지 않고 나머지 항목을 비어있는 것으로 표시하고 싶습니다.
초기화는 새 Order
인스턴스가 생성 될 때마다 실행되기 때문에 장소가 아닙니다. 즉, 데이터베이스에서 기존 주문을 검색 할 때도 마찬가지입니다.
임호보기도 최적의 장소가 아닙니다.
컨트롤러에서 이것을 해결할 것입니다.
def new
@order = Order.new
4.times { @order.items.build }
end
그런 다음 원래 그대로 모델 / 뷰를 떠날 수 있습니다.
항상 4 개의 중첩 된 항목을 표시하려면 편집 작업에서 비슷한 작업을 수행 할 수 있습니다 (최대 4 개까지 채움).
def edit
@order = Order.find(params[:id])
(@order.items.length...4).each { @order.items.build }
end
제 개인적인 의견으로는 이것이보기에서하는 것보다 더 깨끗합니다.
[편집 : 분명히 이중 중첩 형식입니다]
따라서 귀하의 의견에서 이중 중첩 형식이라는 것을 명시했습니다.이 경우 다음과 같이 : wrap_object 옵션을 사용합니다 (자세한 내용을 제공하지 않으면 여기에 괜찮은 예제를 작성하기가 약간 어려워집니다. 짧게 유지하고 명확하기를 바랍니다.) 난 당신이와 함께 "무엇인가"에 대한 양식을 가지고 추측 오전 link_to_add_association
에 :orders
, 당신이 뭔가를 할 수 있도록 그 순서는 몇 가지 (4) 항목이 있어야합니다 :
= link_to_add_association('add order', f, :orders,
:wrap_object => Proc.new { |order| 4.times { order.items.build}; order })
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다