2016-10-22 4 views
0

私のアプリでは、フォームの編集ビューに困惑しています。一部の(ただしすべてではない)インスタンスでは、データベースに保存されている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モデルですか?

+0

繰り返しのないイベントを作成しようとしましたか? – Bandi

+0

すべてのインスタンスは同じサーバーにありますか?日付が間違っているインスタンスが別のサーバーにある場合は、そのサーバーの日付と時刻を確認できます。 –

+0

@Bandi、エラーは繰り返しイベントでのみ発生します。私が知ることから、毎月、毎年繰り返されるイベントでのみ起こります。 – Liz

答えて

0

次の日付を計算する毎月の方法:

when "Monthly" 
    @schedule.add_recurrence_rule(
     IceCube::Rule.monthly.day_of_month(self.event_date.mon) 
    ) 

参照さself.event_date.mon月の日に言及月代わりのself.event_date.dayの番号を参照します。したがって、11月には11日などの日が与えられました。

関連する問題