私のアプリでは、フォームの編集ビューに困惑しています。一部の(ただしすべてではない)インスタンスでは、データベースに保存されているevent_date
は、フォームのf.datetime_select
フィールドに格納されているものとは異なります。たとえば、「11月5日」を選択して送信を押してコンソールを確認すると、event_date
は「11月11日」と表示されます。この問題はののインスタンスでのみ発生し、edit
ビュー(new
ビューではない)でのみ発生します。Railsフォームが `datetime_select`で間違った日付を保存しています
から私のフォームコードの私(記録のために、私のreminders#new
と同じである)は次のようであるreminders#edit
:
<%= form_for @reminder do |f| %>
<div class="row">
<div class="field col-xs-7 col-xs-12">
<%= f.label "Thing to Remember" %>
<%= f.text_field :name, class: "form-control" %>
</div>
<div class="field col-sm-5 col-xs-12">
<%= f.label "Date" %>
<%= f.datetime_select :event_date, class: "form-control" %>
</div>
<div class="field manly-radios col-xs-6">
<%= f.label "Repeat Event?" %><br>
<%= f.radio_button :repeating, "None" %>
<%= f.label :repeating, "No Repeat", value: "None" %><br>
<%= f.radio_button :repeating, "Weekly" %>
<%= f.label :repeating, "Weekly", value: "Weekly" %><br>
<%= f.radio_button :repeating, "Monthly" %>
<%= f.label :repeating, "Monthly", value: "Monthly" %><br>
<%= f.radio_button :repeating, "Yearly" %>
<%= f.label :repeating, "Yearly", value: "Yearly" %><br>
</div>
<div class="field col-xs-6">
<%= f.check_box :gift %>
<%= f.label "Gift required" %><br>
<%= f.check_box :gift_help %>
<%= f.label "Help me find a gift" %><br>
<%= f.check_box :reminder %>
<%= f.label "Please remind me" %>
</div>
</div> <!-- row -->
<div class="row text-center" style="padding-top: 25px">
<%= f.submit "Remind Me", class: "hvr-grow btn btn-manly" %>
</div>
<% end %>
edit
のための私のreminders_controller.rb
方法は、このようなものです:
def edit
@reminder = Reminder.find(params[:id])
@reminder.save
render layout: 'nofooter'
end
これらの強力なパラメータを使用すると、
private
def reminder_params
params.require(:reminder).permit(:name, :user, :event_date, :mail_date, :occasion_type, :reminder, :repeating, :gift, :gift_help)
end
class Reminder < ActiveRecord::Base
belongs_to :user
before_save :create_mail_date
after_save :send_reminder_emails
extend FriendlyId
friendly_id :name, use: [:slugged, :finders]
def create_mail_date
@schedule = IceCube::Schedule.new(self.event_date)
case self.repeating
when "Weekly"
@schedule.add_recurrence_rule(
IceCube::Rule.weekly
)
when "Monthly"
@schedule.add_recurrence_rule(
IceCube::Rule.monthly.day_of_month(self.event_date.mon)
)
when "Yearly"
@schedule.add_recurrence_rule(
IceCube::Rule.yearly.day_of_year(self.event_date.yday)
)
end
if self.repeating
self.event_date = @schedule.next_occurrence(Time.current)
end
self.mail_date = self.event_date - 7.days
end
private
def send_reminder_emails
if self.reminder
RemainderMailerJob.set(wait_until: self.mail_date).perform_later(user, remainder)
#ReminderMailer.delay(run_at: self.mail_date).reminder_send(self.user, self)
self.create_mail_date
end
end
handle_asynchronously :send_reminder_emails
end
誰でもこの奇妙な行動を引き起こしているかを見ることができます:そして、ここでは私のreminder.rb
モデルですか?
繰り返しのないイベントを作成しようとしましたか? – Bandi
すべてのインスタンスは同じサーバーにありますか?日付が間違っているインスタンスが別のサーバーにある場合は、そのサーバーの日付と時刻を確認できます。 –
@Bandi、エラーは繰り返しイベントでのみ発生します。私が知ることから、毎月、毎年繰り返されるイベントでのみ起こります。 – Liz