我想自动为控制器的: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。
答案 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