0

start_date と end_date を含む期間モデルがあります。Topic モデルに属します。

私のトピック フォームでは、期間も管理したいと考えています。最初に、期間内の 2 つの日付に対して 2 つのテキスト フィールドを使用しました。また、reject_if end_date が nil です。

  accepts_nested_attributes_for :period,
    reject_if: lambda { |p| p[:end_date].blank? }

できます。そして数か月後、日付を入力するためのいくつかの選択ステートメントを表示するdate_selectを使用するようにフォームを変更しました。

これを行ったとき、各選択が次のようになることがわかりました。

<select name="topic[period_attributes][end_date(1i)]" id="topic_period_attributes_end_date_1i">

1iこれは、reject_if が機能しなくなったことを意味し、すべてが拒否されることに注意してください。次のように変更する必要があります。

  accepts_nested_attributes_for :period,
    reject_if: lambda { |p| p[:'end_date(1i)']].blank? }

これは機能しますが、以前ほど良くはありません (日付の年だけをチェックするとエラーが発生しやすいようです)。

date_select を使用するときに拒否する正しい方法はありますか?

4

1 に答える 1

0

:end_date属性のすべての部分をチェックするクラス ヘルパー メソッドを追加できます。

def self.date_populated?(params)
  ['1i', '2i', '3i'].select{|date_part| 
    params[:"end_date(#{date_part})"].blank?
  }.blank?
end

ヘルパーを確認します。

reject_if: lambda { |p| !date_populated?(p) }
于 2012-05-22T02:54:17.990 に答える