我正在学习轨道并远离本书,并在我增加知识的同时创建一个带有附加功能的简单应用程序。我正在写一个简单的博客应用程序,我有一个名为date添加的表单中的字段,我不希望这是一个字段,我希望它从服务器获取日期并自动将其放入数据库。我该怎么做呢?我想到了一个隐藏的领域,但后来不确定如何处理日期并将其插入隐藏的字段。这是走错路的错误方式吗?
提前谢谢,
院长
答案 0 :(得分:7)
我不会使用隐藏字段,因为即使它被隐藏,用户也可以操纵它。我认为解决此问题的最佳方法是,在保存对象之前,忽略表单中的日期并在控制器操作中向您的模型添加日期:
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
。
答案 1 :(得分:1)
这是显示当前日期的表单的视图(新):
<% form_for(@recipe) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :title %><br />
<%= f.text_field :title %>
</p>
<p><b>date</b><br/>
<%= f.datetime_select :date %>
</p>
<p>
<%= f.label :instructions %><br />
<%= f.text_area :instructions %>
</p>
<p>
<%= f.submit 'Create' %>
</p>
<% 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
答案 2 :(得分:0)
在Rails中,如果您为模型属性指定某些名称,则ActiveRecord会为它们提供特殊行为。有四种不同的日期/时间相关:
created_on
:自动设置为创建记录的日期created_at
:自动设置为创建记录的日期和时间updated_on
:自动设置为记录更新的日期updated_at
:自动设置为记录更新的日期和时间通常情况下,created_at
/ updated_at
对会被模型关联的ActiveRecord Migration中的t.timestamps
声明自动添加到模型中。