2010-05-24 40 views
2


林学习轨道,探索了一下从书本,并创建具有为提高我的知识添加功能的简单应用。即时通讯编写一个简单的博客应用程序,我有一个名为添加日期的表单中的字段,我不希望这是一个字段,我希望它从服务器获取日期并自动将其放入数据库。我将如何去做这件事?我正在考虑一个隐藏的领域,但不确定如何处理日期并将其插入隐藏的领域。这是错误的做事方式吗?
由于事先
院长在轨当前日期形成

回答

6

我不会用一个隐藏字段,因为即使它被隐藏在用户可以操纵这一点。我认为,解决这个问题的最好办法是,忽略形式的日期和时间正确保存对象之前添加到您的控制器操作模型:

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 

但是你没有做任何这一点,因为轨道上的红宝石提供了两列created_atupdated_at。当对象被创建时将会设置created_at,并且每次更新此对象时都会设置updated_at

+0

是当对象被添加到数据库中的updated_at设置?正如我想知道如果我可以只是改变我的看法,以update_at命令? – Dean 2010-05-24 10:31:37

+0

是,当对象被添加到数据库'updated_at'相同'created_at' – jigfox 2010-05-24 10:37:35

0

在Rails中,如果你给模型的属性赋予某些名字,那么ActiveRecord会给它们特殊的行为。有四种不同的日期/时间相关的:

  • created_on:被自动设置为记录的创建
  • created_at日期:被自动设置为日期和记录的创建
  • updated_on时间:被自动设置为记录被更新
  • updated_at日期:被自动设置为记录被更新
的日期和时间210

通常,created_at/updated_at对得到自动由t.timestamps声明在添加到模型该模型的相关ActiveRecord Migration

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