0

我有一个周期模型,包含 start_date 和 end_date。它属于一个主题模型。

在我的主题表单中,我也想管理期间。因此,首先我只为该期间的两个日期使用了两个文本字段。我也有一个reject_if end_date 为零。

  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 回答