하나의 양식에 여러 항목 (이름 값과 내용 값이있는 항목)을 만들려고합니다. 내가 가진 코드는 작동하지만 비어있는 항목을 무시하는 방법을 알 수 없습니다. 여기에 코드입니다 :Ruby on Rails에서 모든 빈 필드가있는 모델을 무시합니다.
#item.rb
class Item < ActiveRecord::Base
attr_accessible :name, :content
validates_presence_of :name, :content
end
#items_controller.rb
class ItemsController < ApplicationController
def new
@items = Array.new(3){ Item.new }
end
def create
@items = params[:items].values.collect{|item|Item.new(item)}
if @items.each(&:save!)
flash[:notice] = "Successfully created item."
redirect_to root_url
else
render :action => 'new'
end
end
#new.html.erb
<% form_tag :action => 'create' do %>
<%@items.each_with_index do |item, index| %>
<% fields_for "items[#{index}]", item do |f| %>
<p>
Name: <%= f.text_field :name %>
Content: <%= f.text_field :content %>
</p>
<% end %>
<% end %>
<%= submit_tag %>
<% end %>
이 코드는 모든 항목에 대한 모든 필드 형태로 작성 될 때 작동하지만, 어떤 필드가 비어있는 경우 (때문에 검증에) 실패합니다. 목표는 다른 항목이 비어 있어도 1 또는 2 개의 항목을 저장할 수 있다는 것입니다.
나는 이것에 간단한 해결책이있을 것이라고 확신하지만, 아무런 소용이없는 시간 동안 꾸며 들었습니다. 어떤 도움을 주셔서 감사합니다!
컨트롤러 수준에서 매개 변수를 필터링해야합니다. – apneadiving
@apneadiving - 좀 더 구체적으로 표현할 수 있습니까? 정확히 어떻게 작동하는지 모르겠습니다. 감사! – aguynamedloren
캠의 코딩 방법을 따라야하지만 params 해시로 작업해야합니다. 나는보기에 동의하지만 params 샘플 (로그를보십시오)을 보내주십시오. – apneadiving