新手问题 如何把 JSON 中的 RTC 时间转换为 DateTime 并创建 Model?

zix · 2017年02月15日 · 最后由 wootaw 回复于 2017年02月15日 · 1711 次阅读

首先

post的json中的时间格式是RTC比如1487087379

我现在是这么做的

def create
    @game = Game.new(game_params)
    @game.update!(time_of_begin: Time.at(game_params[:time_of_begin]))
    @game.update!(time_of_end: Time.at(game_params[:time_of_end]))
    respond_to do |format|
      if @game.save
        format.html { redirect_to @game, notice: 'Game was successfully created.' }
        format.json { render :show, status: :created, location: @game }
      else
        format.html { render :new }
        format.json { render json: @game.errors, status: :unprocessable_entity }
      end
    end
end
def game_params
      params.require(:game).permit(:number_of_player, :theme_id, :time_of_begin, :time_of_end)
end

但是感觉有点累赘,有什么比较简洁的写法吗

😓 LZ 先学好怎么用 ActiveRecord 增删查改吧。

看不懂你的问题是什么,不是都已经转成 DateTime 类型了么

def create
  #create中需要update?
  @game.update!(time_of_begin: Time.at(game_params[:time_of_begin]))
  @game.update!(time_of_end: Time.at(game_params[:time_of_end]))
end

不知道你是不是这个时间转换问题?

datetime = DateTime.now
 => Fri, 12 Sep 2014 16:53:18 +0800
datetime.strftime('%Y-%m-%d') # date
 => "2014-09-12"
datetime.strftime('%H:%M:%S') # time
 => "16:53:18"
datetime.strftime('%Y-%m-%d %H:%M:%S') # datetime
 => "2014-09-12 16:53:18"
datetime.strftime('%Y年%-m月%-d日') # date_zh
 => "2014年9月12日"
datetime.strftime('%Y年%-m月%-d日 %H:%M:%S') # datetime_zh
 => "2014年9月12日 16:53:18"

我觉得逐条转换没问题,不过 update! 用错了,每次调用都会保存一次数据库。

写在 before_update 之前是不是能好点?

#4 楼 @Rei 我也不想这样的,但是我不知道如何在 @game.save 之前修改 game_params[:time_of_begin]……不知道该如何写

#2 楼 @huacnlee 是转换了 但是我的本意不想进行数据库操作,想在@game.save之前完成 game_params[:time_of_begin] 的转换,但是

game_params[:time_of_begin] = Time.at(game_params[:time_of_begin])

这么写是错误的,所以我只好暂时用 update

这么写,只保存一次数据库

@game.assign_attributes(
  time_of_begin: Time.at(game_params[:time_of_begin]),
  time_of_end: Time.at(game_params[:time_of_end])
)
zix 关闭了讨论。 02月15日 13:06
需要 登录 后方可回复, 如果你还没有账号请 注册新账号