ユーザーに日付を更新してもらいたい更新フォームがあります。日付は、現在データベースにある日付よりも常に新しい必要があるため、ユーザーが送信ボタンを押した後にスクリプトで検証する必要があります。私はここまで来ました:
<%= simple_form_for(calendar, :html => { :method => :put, :name => 'extend_link' }) do |f| %>
<p>Select the new date (must be newer than the current date): <%= f.date_select :end_at %> at <%= f.time_select :end_at, { :ignore_date => true } %></p>
<% end %>
コントローラーに入れられた標準更新、カレンダーモデルの更新
def update
@calendar = current_user.calendar.find(params[:id])
respond_to do |format|
if @calendar.update_attributes(params[:calendar])
format.html { redirect_to calendar_path, notice: 'The end date was extended.' }
format.json { head :no_content }
end
end
end
フォームがレンダリングされた後にソースをチェックして、日付と時刻の選択がどのように機能するかを理解しました。また、多くの調査を行った後、モデルと end_at に「マージ」される前に、日付が異なる部分に分割されていることが明らかです桁
calendar[end_at(3i)]
calendar[end_at(2i)]
....
しかし、何らかの理由で、フォームが送信された後、完全な params[:end_at] にアクセスできません。ただし、アクセス可能である必要があります。それ以外の場合、モデルをまとめて更新するにはどうすればよいでしょうか? 私はこれで気が狂いました。
それはとても簡単かもしれません:
if params[:end_at] < @calendar.end_at
puts "The new ending date is not after the current ending date."
else
@calendar.update_attributes(params[:calendar])
end
なぜ機能しないのですか、どうすれば問題を解決できますか?
助けてくれてありがとう。