ユーザーがイベントを作成できるページを作成しようとしています。最初にイベントを保存できるようにしてほしいと思います。これにより、イベントはデータベースに保存されますが、他のユーザーには表示されなくなります。また、ユーザーがイベントを公開できるようにしたいと考えています。これにより、ユーザーが変更を加えることを防ぎ、他のユーザーがそれを見ることができるようになります。
イベント作成フォームに「保存」ボタンと「公開」ボタンの両方を配置することで、これを行う予定でした。保存するということはまだ不完全であることを意味するので、このボタンがクリックされたときは何も検証する必要はありませんが、「公開」ボタンがクリックされたときは検証を行います。
event.rb の次のコードでこれを達成しようとしましたが、いずれかのボタンをクリックすると検証が実行されます。
with_options :if => :published? do
validates_date :date, presence: true, :after => Time.now, :after_message => 'must be in the future'
validates_time :time, presence: true
end
def published?
:published == "true"
end
:published は、公開ボタンがクリックされたときにのみ "true" になる必要があることを確認しました。(ユーザーが「公開」をクリックすると、JSを介してevent [published]をtrueに設定しています。それ以外の場合はデフォルトでfalseになります。)
検証が常に実行されている理由は何ですか?
編集:これが機能しなかった理由はまだわかりませんが、次のように、各検証句を個別にチェックすると、期待どおりに機能することがわかりました。
validates_date :date, presence: true, :after => lambda { Time.now }, :after_message => 'must be in the future', :if => :published?
validates_time :time, presence: true, :if => :published?