以铁轨forms的当前日期
我正在学习轨道,并从书中探索一下,并创建一个带有附加function的简单应用程序,因为我增加了我的知识。 我正在写一个简单的博客应用程序,我有一个名为date添加的表单中的字段,我不希望这是一个字段,我希望它从服务器获取日期并自动将其放入数据库。 我该怎么做呢? 我在考虑一个隐藏的领域,但不确定如何处理日期并将其插入隐藏的字段。 这是不正确的做事方式吗?
提前致谢,
院长
我不会使用隐藏字段,因为即使它被隐藏,用户也可以操纵它。 我认为解决此问题的最佳方法是,在保存对象之前,忽略表单中的日期并在控制器操作中向您的模型添加日期:
def SomeController #... def create @model = Model.new params[:model] @model.date_field_name = Time.now if @model.save # whatever should be done if validation passes or redirect_to @model else # whatever should be done if validation fails or render :new end end #... end
但是您不必执行任何操作,因为ruby on rails提供了两列created_at
和updated_at
。 创建对象时将设置created_at
每次更新此对象时都会设置updated_at
。
这是显示当前日期的表单的视图(新):
<% form_for(@recipe) do |f| %> <%= f.error_messages %> <%= f.label :title %>
<%= f.text_field :title %>
date
<%= f.datetime_select :date %>
<%= f.label :instructions %>
<%= f.text_area :instructions %>
<%= f.submit 'Create' %>
<% end %> <%= link_to 'Back', recipes_path %>
和控制器:
def new @recipe = Recipe.new respond_to do |format| format.html # new.html.erb format.xml { render :xml => @recipe } end end
在Rails中,如果您为模型属性指定某些名称,则ActiveRecord会为它们提供特殊行为。 有四种不同的日期/时间相关:
-
created_on
:自动设置为创建记录的日期 -
created_at
:自动设置为创建记录的日期和时间 -
updated_on
:自动设置为记录更新的日期 -
updated_at
:自动设置为记录更新的日期和时间
通常, created_at
/ updated_at
对通过模型关联的ActiveRecord Migration中的t.timestamps
声明自动添加到模型中。