Ruby on rails 在控制器中获取参数,转换字符串类型,然后保存
我有一篇ajax帖子,用来创建一个新的Ruby on rails 在控制器中获取参数,转换字符串类型,然后保存,ruby-on-rails,controller,Ruby On Rails,Controller,我有一篇ajax帖子,用来创建一个新的会议。在保存之前,我想在控制器中将字符串meeting_time转换为datetime格式 我已经尝试过了,但它仍然可以节省会议时间: def create requestor = current_user @meeting_with_params = meeting_params @meeting_time = @meeting_with_params[:meeting_time] @meeting_time = @meeting_time.to_dat
会议
。在保存之前,我想在控制器中将字符串meeting_time转换为datetime格式
我已经尝试过了,但它仍然可以节省会议时间:
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
正在传递的参数如下所示:
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"]]
以及.js文件中的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);
}
})
如何在创建控制器中提取会议时间,并在保存之前将其更改为datetime
谢谢
****更新
我知道它没有正确保存,因为我还有一种方法,可以将今天的日期与会议时间进行比较,如果已经过去了,可以做些什么。直接保存到数据库时,它会识别经过的时间。通过POST保存时,使用完全相同的字符串,因为它正在比较两种不同的类型。比较控制器:
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
看起来,你的代码看起来不错。如果您试图通过查询帖子来打印会议时间,那么它应该是datetime对象 更新 正如@Rocco所说,以下内容足以保存数据,因为Rails将从参数自动将日期字符串转换为日期
def create
requestor = current_user
@meeting_with_params = meeting_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
ActiveRecord自动类型转换所有输入,以便它们与数据库架构匹配。因此,即使允许您将
会议时间
保存为字符串,它也会在加载时将其转换为日期时间。如果您感兴趣,可以阅读更多在保存之前,无需将datetime字符串转换为datetime,因为它将自动保存为datetime
Ex)
考虑第一个字段是用户名,第二个字段是DOB。第二个将自动解析为datetime
“1990-10-31”上方的第一个字符串被视为日期
第二个字符串“11:45:44”被视为时间和
第三个字符串“0000”表示时区什么是会议时间db列类型?@Aleksey在数据库中,它是datetime。但是由于我只能通过ajax调用传递一个字符串,所以它当前正在接收一个字符串。我需要在保存之前转换为datetime。您当前的代码有什么问题?您是如何确保它仍然保存为数据库中的字符串的?我认为这只是表示问题。尝试找到post并在其上运行call
meeting\u time
方法。结果会是什么?@Aleksey我更新了我的答案,提供了更多信息,希望能有所帮助。谢谢我更新了我的问题,提供了更多关于如何知道日期未保存为正确类型的信息。希望这能有所帮助:/我更新了我的问题,提供了更多信息,说明为什么我发现它没有以正确的格式保存。谢谢通过你的帖子,我发现这是在节省时间,而不是约会时间。你能建议一种正确地保存为DateTime而不是time的方法吗?时间和日期时间类型都是相似的。如果它们是相同的,那么为什么查询只在保存为datetime类型而不是时间类型时才起作用?有没有办法指定类型必须是datetime,因为它在模式中被分类为datetime?这可能是一个时区问题。尝试从AJAX调用中始终以UTC格式发送日期,以便比较查询始终返回匹配的记录。
def create
requestor = current_user
@meeting_with_params = meeting_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
User.create('Test user', '1990-10-31 11:45:44 0000')