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 %>

steps_controller:

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

step.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

updated_at 日付を更新するには、published_on 日付パラメーターを再フォーマットする必要がありますか?

4

3 に答える 3

0

公開日に新しい属性を使用する必要があります。:updated_at 属性を使用できますが、データベース内のエントリを更新するたびに上書きされます。Rails を使用している場合は、Rails が非常に独断的なフレームワークであることを知っているので、規則に従ってください。それに加えて、データベースに多くのスペースを節約したり、最適化したりすることはありません。

于 2013-05-30T21:53:28.893 に答える
0

ラインで

@step.update_attributes(:updated_at => published)

Rails は、あなたが に更新しようとしていると不平を言っているようupdate_atですnil。したがって、変数publishedが nil である可能性があります。

于 2013-05-30T21:47:44.693 に答える
0

モデル属性は、モデル オブジェクトが最後に更新された時間を記録するためのupdated_atものではなく、実際には何の目的もありません。オーバーライドすることはできますが、Rails でオーバーライドすることはお勧めできません。あなたが目撃しているエラーは、コア属性をオーバーライドしようとした結果である可能性があります。

私が過去に実装した解決策は、おそらく のような別の属性を作成することですpublished_atupdated_at意図された目的のために所定の位置に保持しながら、好きなようにこれを操作できます。

于 2013-05-30T21:44:32.930 に答える