以铁轨形式的当前日期

时间:2010-05-24 10:14:45

标签: ruby-on-rails ruby


我正在学习轨道并远离本书,并在我增加知识的同时创建一个带有附加功能的简单应用程序。我正在写一个简单的博客应用程序,我有一个名为date添加的表单中的字段,我不希望这是一个字段,我希望它从服务器获取日期并自动将其放入数据库。我该怎么做呢?我想到了一个隐藏的领域,但后来不确定如何处理日期并将其插入隐藏的字段。这是走错路的错误方式吗?
提前谢谢,
院长

3 个答案:

答案 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_atupdated_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声明自动添加到模型中。