1

次のような部分を持つユーザー用のフォームがあります。

<%= f.simple_fields_for :uncles, User.new do |uncle| %>
    <%= uncle.input :first_name, :label => "First Name" %>
    <%= uncle.input :last_name, :label => "Last Name" %>
    <%= uncle.input :email%>
<% end %>

私の質問は次のとおりです: simple_fields のすべてのフィールドが空の場合、この「おじ」ユーザー レコードを作成しないようにするにはどうすればよいですか?

私の User モデルには次のものがあります。

has_many     :uncles,
             :through               => :uncles_relationships,
             :source                => :uncle
4

3 に答える 3

0

accepts_nested_attributes_forあなたの場合、 @Buck Doyleが言ったように、を使用する必要があります。その方法を使うと、親と子のフォームを作成することができます(あなたの言葉通り)。フォームを送信すると、子の情報が空白の場合、親の情報のみが保存されます。では、どのように使用するのaccepts_nested_attributes_forですか?

User モデルでは、これを追加できます。

attr_accessible :uncles_attributes
accepts_nested_attributes_for :uncles, :reject_if => lambda { |attrs| attrs.all? { |key, value| value.blank? } }

それだけです。これで、Userコントローラでsaveメソッドを使用してオブジェクトを作成するだけUserで、叔父 (子供) の情報が空白の場合、親の情報のみが保存されているかどうかがチェックされます。

于 2012-11-17T19:05:49.450 に答える
0

accepts_nested_attributes_for関連するモデルの作成にを使用していると仮定してreject_if、空白のフィールドをチェックするために a を追加します。

accepts_nested_attributes_for :uncles, :reject_if => :reject_uncles?

def reject_uncles?(attributes)
  attributes[:first_name].blank? &&
  attributes[:last_name].blank? &&
  attributes[:email].blank?
end
于 2012-11-17T17:50:30.127 に答える
0

おそらく次のようなカスタムバリデーターを試してみます。

(User model class)
validate :all_fields_required

private
def all_fields_required
  if first_name && last_name && email then
  # or perhaps: if (first_name != '') && (last_name != '') && (email != '') then
    true
  else
    false
  end
end
于 2012-11-17T18:22:20.337 に答える