0

我的 Rails 应用程序中有一个表单元素,用于更改帖子的发布日期(而不是时间)。我这样做是为了可以使用 jquery-ui 中的 datepicker 元素,并在当时有下拉菜单。

在此处输入图像描述

我想将“updated_at”属性更新为发布日期。但是,我收到一个错误:

PG::Error: ERROR:  null value in column "updated_at" violates not-null constraint
: UPDATE "steps" SET "updated_at" = NULL WHERE "steps"."id" = 472

这是我的表格(可以正确保存时间但不能保存日期):

 <%= semantic_form_for [@project, @step], :html => {:multipart => true} do |f| %>
    <%= f.inputs do%>
    <div id="publishedOn">
        <span class="label" style="margin-left:9px">Published on</span>
           <%= f.text_field :published_on, :value=> (@step.updated_at.strftime("%m/%d/%Y")) %>  at <%= f.time_select :updated_at, :class=>"btn dropdown-toggle", :ampm=> true, :ignore_date=>true%>
      </div>
<% end %>

步骤控制器:

def update
    @step = @project.steps.find_by_position(params[:id])
    published = String(params[:published_on])
    published = published.gsub("/", "-")
    @step.update_attributes(:updated_at => published)
end

步骤.rb:

class Step < ActiveRecord::Base
  extend FriendlyId
  friendly_id :position

  has_ancestry :orphan_strategy => :adopt

    attr_accessible :description, :name, :position, :project_id, :images_attributes, :parent_id, :ancestry, :updated_at, :published_on
    belongs_to :project
    has_many :images, :dependent => :destroy
    accepts_nested_attributes_for :images, :allow_destroy => :true

    validates :name, :presence => true
end

我是否需要重新格式化 published_on 日期参数以更新 updated_at 日期?

4

3 回答 3

0

在行

@step.update_attributes(:updated_at => published)

Rails 似乎在抱怨您正在尝试更新update_atnil. 所以可能发生的是变量published为零。

于 2013-05-30T21:47:44.693 回答
0

您确实应该为发布日期使用新属性。您可以使用 :updated_at 属性,但每当您更新数据库中的条目时,它将被覆盖。如果您使用的是 Rails,您就会知道这是一个非常固执己见的框架,因此请遵守约定。除此之外,您并没有在数据库中节省大量空间或进行优化。

于 2013-05-30T21:53:28.893 回答
0

updated_at模型属性实际上并不是为了任何目的,而是记录模型对象的最后一次更新时间。它可以被覆盖,但这样做不是很好的 Rails 实践。您目睹的错误可能是尝试覆盖核心属性的结果。

我过去实现的解决方案是创建一个单独的属性,可能类似于published_at. 您可以根据需要对其进行操作,同时保持updated_at其预期用途。

于 2013-05-30T21:44:32.930 回答