Rails mongodb - 在字段中设置今天的日期:日期

时间:2014-02-26 18:45:46

标签: ruby-on-rails mongoid

我想自动为控制器的:date字段添加今天的日期。 我是Rails的新手,不知道如何设置这个默认值,除了它必须在控制器中。

这是我的帖子模型:

class Post
  include Mongoid::Document
  field :title, type: String
  field :text, type: String
  field :date, :type => DateTime
end

我的邮政控制员:

def create
  @post = Post.new(post_params)

  @post.save
  redirect_to @post
end 

private
  def post_params
    params.require(:post).permit(:title, :text, :date)
end

查看Rails文档,我读到了Date.current或Date.today。

4 个答案:

答案 0 :(得分:4)

你总是可以让Mongoid为你处理默认值

class Post
  include Mongoid::Document
  field :title, type: String
  field :text, type: String
  field :date, :type => DateTime, default: ->{ Date.today }
end

这样,如果你的参数中的日期为零,它将被设置为今天的日期。

默认值记录为here.

答案 1 :(得分:0)

在类中设置默认值,正如@T J建议的那样。

但是如果你只想在特定的视图中设置默认值,让我们说你的'发布/创建'视图,你可以在你的对应行动中使用它:

    def create
      @post = Post.new(post_params)
      @post.date ||= Date.today
      .
      .
      .
    end

语法:

     @post.date ||= Date.today

的捷径
    @post.date = @post.date || Date.today

答案 2 :(得分:0)

我知道这是一篇老文章,我想补充一点,在某些情况下,您可以通过简单地将其包含在模型中来使用Timestamps模块:

include Mongoid::Timestamps::Created

答案 3 :(得分:0)

我遇到类似的问题。当expired_at没有值时,需要将Time.zone.now设置为默认时间,例如:

class Member
  include Mongoid::Document
  field :expired_at, type: DateTime, default: Time.zone.now
end

在分阶段部署代码时不起作用。 我研究了这个问题,并在Mongoid手册here中找到了答案。

  field :dob, type: Time, default: Time.zone.now # first
  field :dob, type: Time, default: -> { Time.zone.now } # second

对于默认时间,它有两种格式,第二种在lambdas或procs中定义,第一种没有。但是它们并不等效。

第一个在类加载时评估,第二个在文档创建时评估。

我应该使用第二个,如下:

class Member
  include Mongoid::Document
  field :expired_at, type: DateTime, default: -> { Time.zone.now }
end

您还应该使用第二种方法,如下所示:

class Post
  include Mongoid::Document
  field :date, type: Date,  default: -> { Date.today }
end