0

特別な種類の日付形式を使用する Ruby on Rails アプリケーションを開発しています。問題の日付形式は Year.month.day で、日付は次のようになります。

年.月.日 年.月 年

形式をチェックし、入力日付がこれらの形式のいずれかに適合する場合は有効にする必要がある検証方法に取り組んでいます。これまでのところ、私のコードは次のとおりです。

def data_format_correct
regexymd = /[0-9]{4}[.][0-9]{1,2}[.][0-9]{1,2}/
regexym = /[0-9]{4}[.][0-9]{1,2}/
regexy = /[0-9]{4}/
if :data.to_s =~ regexymd
  return true
elsif  :data.to_s =~ regexym
  return true
elsif :data.to_s =~ regexy
  return true
else
  errors.add(:data)
  return
end

終わり

フォームに日付を入力するたびに、else ケースがエラーで発生します。私のコードは正しいと確信しています。何か不足していますか?

編集:

解決策を見つけました。次のように機能します。

regexymd = /^[0-9]{4}[.][0-9]{1,2}[.][0-9]{1,2}$/
regexym = /^[0-9]{4}[.][0-9]{1,2}$/
regexy =  /^[0-9]{4}$/
regex_final = Regexp.union(regexymd, regexym)
regex_final = Regexp.union(regex_final, regexy)

validates :data, :format => { :with => regex_final }

私と同じ状況の誰かに役立つことを願っています。回答ありがとうございます。フィードバックに感謝します。

4

1 に答える 1

0

variable に一致していません。シンボルdataに一致しているため、エラーが発生します(そのエラーを投稿できれば便利です)。 :data

とにかく、あなたが望むのは次のようなものだと思います:

def data_format_correct
  regexymd = /[0-9]{4}[.][0-9]{1,2}[.][0-9]{1,2}/
  regexym = /[0-9]{4}[.][0-9]{1,2}/
  regexy = /[0-9]{4}/
  if regexymd.match(data.to_s)
    return true
  elsif  regexym.match(data.to_s) 
    return true
  elsif regexy.match(data.to_s) 
    return true
  else
    errors.add(:data)
    return
  end
end
于 2012-07-31T10:17:13.280 に答える