0

モデル内でとUser.rbの存在を検証しますusernamename

 validates_presence_of :username, :name

ただし、このようなコールバックを使用して作成されているusername間、フィールドのみがフォームに存在します。namebefore_validation

  def set_username_as_name_if_empty
    if self.username && self.username.present?
      self.name = self.username if self.name && self.name.empty?
    end
  end

これは、フィールドがフォームに存在する限り機能しnameます (入力または非表示は関係ありません)。

name私の質問は、フォームにフィールドを追加せずにどうすれば同じことを達成できるでしょうか? が必要であるという理由だけで、非表示の値として追加する必要はないように思えます。

何か案が?

4

1 に答える 1

2

検証方法を簡素化する方法:

def set_username_as_name_if_empty
  if name.blank?
    name = username if username.present?
  end
end

以下を実行してもエラーは発生しないためです。

1.9.3p0 :038 > nil.present?
 => false

私はあなたの質問を正確に理解していませんが、あなたが意味するなら

「検証の失敗を避けるために、フォームに入力を (非表示にしても) 強制する必要がありますか?」

nameいいえ、検証の前に属性を設定するため、この入力は必要ありません。

于 2012-12-04T16:37:45.800 に答える