我有一个期间模型,包含start_date和end_date。它属于Topic模型。
在我的主题表单中,我也希望管理这段时间。所以首先我只使用两个文本字段来表示期间的两个日期。我也有一个reject_if,end_date是nil。
accepts_nested_attributes_for :period,
reject_if: lambda { |p| p[:end_date].blank? }
有效。几个月后,我改变了表单以使用date_select,它显示了几个用于输入日期的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时是否有正确的拒绝方式?
答案 0 :(得分: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) }