複数のアイテム(それぞれ名前と値を持つアイテム)を1つのフォームに作成しようとしています。私が持っているコードは機能していますが、空白の項目を無視する方法を理解することはできません。ここでは、コードです: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
camのコーディング方法に従うべきですが、paramsハッシュで作業する必要があります。私は一見することに同意しますが、paramsサンプルを提供してください(あなたのログを見てください) – apneadiving