新しいMeeting
を作成するajax投稿があります。保存する前にmeeting_timeという文字列をコントローラのdatetime形式に変換したい。コントローラのパラメータを取って文字列型を変換して保存する
私はこれを試してみましたが、それはまだ文字列としてmeeting_timeを保存している:
def create
requestor = current_user
@meeting_with_params = meeting_params
@meeting_time = @meeting_with_params[:meeting_time]
@meeting_time = @meeting_time.to_datetime
@meeting_with_params[:meeting_time] = @meeting_time
#@meeting_with_params
@meeting = Meeting.new(@meeting_with_params)
respond_to do |format|
if @meeting.save
format.html { redirect_to home_url, notice: 'Your lex was successfully requested! Click Plan Meeting ' }
format.json { render :show, status: :created, location: @meeting }
else
format.html { render :new }
format.json { render json: @meeting.errors, status: :unprocessable_entity }
end
end
end
paramsを次のようになり渡されている:.jsファイル内で
Started POST "/meetings" for 127.0.0.1 at 2016-10-31 11:45:44 -0400
Processing by MeetingsController#create as */*
Parameters: {"meeting"=>{"requestor_id"=>"1", "requestee_id"=>"2", "meeting_time"=>"2016-10-18 22:10:00", "accepted"=>"false", "status"=>"Active", "location"=>"Black Forest Restaurant", "location_address"=>"733 Fulton St, Brooklyn, NY 11217"}}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
(0.1ms) begin transaction
SQL (1.1ms) INSERT INTO "meetings" ("requestor_id", "requestee_id", "meeting_time", "accepted", "location", "status", "location_address", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) [["requestor_id", 1], ["requestee_id", 2], ["meeting_time", "2016-10-18 22:10:00.000000"], ["accepted", "f"], ["location", "Black Forest Restaurant"], ["status", "Active"], ["location_address", "733 Fulton St, Brooklyn, NY 11217"], ["created_at", "2016-10-31 15:45:44.557266"], ["updated_at", "2016-10-31 15:45:44.557266"]]
とAJAX呼び出しを:
$.ajax({
url: '/meetings',
type: 'POST',
data: {
meeting: {
requestor_id: currentUserId,
requestee_id: requesteeId,
meeting_time: rubyDateTime,
accepted: false,
status: "Active",
location: meetingLocation,
location_address: meetingAddress
}
},
success: function(result) {
createNotification(currentUserId, "Your meeting was successfully requested.");
location.reload();
},
error: function(err) {
console.log(err);
}
})
作成コントローラでmeeting_timeを引き出し、それをdatetimeに変更するにはどうすればよいですか省エネ?
ありがとうございます!
****更新 今日の日付とmeeting_timeを比較するメソッドがあるので、正しく保存されていないことを知っています。データベースに直接保存すると、経過した時間が認識されます。まったく同じ文字列を使用してPOSTで保存した場合、2つの異なるタイプを比較しているためではありません。比較ですコントローラ:
def requestor_review_meeting
@past_meetings = Meeting.where('meeting_time <= ? AND requestor_id= ? AND status = ? AND requestor_score < ?', DateTime.current, current_user, "Active", 1).order('meeting_time asc');
render json: @past_meetings
end
とコンソールには:
> meeting_time
=> Tue, 18 Oct 2016 22:10:00 UTC +00:00
2.1.2 :012 > meeting_time.class
=> ActiveSupport::TimeWithZone
2.1.2 :013 > meeting_time.is_a?(DateTime)
=> false
2.1.2 :015 > meeting_time.is_a?(Time)
=> true
もので 'meeting_time'のDBカラムタイプ? – Aleksey
@Alekseyデータベースでは、datetimeです。しかし、私はAJAX呼び出しを通して文字列を渡すことしかできないので、現在文字列を受け取ります。保存する前にdatetimeに変換する必要があります。 – gwalshington
現在のコードの問題点は何ですか? DBに文字列として保存されていることをどうやって確認しましたか? – Jayaprakash