0

私のアプリが新しい作業指示書を作成すると、その作業指示書に関連付けられた最初のタスクも作成されます。新しいタスクの taskstatus は、Taskstatus テーブルの最初の ID に設定する必要があります。

Taskstatus テーブルの最初のレコードの ID はたまたま 2です。
しかし、コードは task.taskstatus_id = 1 を設定します。

ワークオーダー コントローラ コード:

  before_create :first_task

  protected
  def first_task
   self.tasks.build taskstatus_id: Taskstatus.first, taskname: self.description
  end

私は何が欠けていますか?ありがとう!

UPDATE ---- taskstatus テーブルの最初のレコードの ID = 2 です。ID = 1 のレコードは削除されました。新しいタスク レコードの taskstatus_id = 2 が必要です。

taskstatus.rb には、次のものがあります。

  default_scope :order => 'id ASC' 

これにより、 taskstatus = 1 のタスクも作成されました

Taskstatus.limit(1)

私はpostgreSQLを使用しています。

taskstatus インデックス ページでは、3 つのレコードが表示されます =

IDステータスコード

2 新規

3 開始

4 完了

おかしなことが起きている!!

UPDATE 2 - あなたはこれを信じるつもりはありません!!!!!! (私はしません) - しかし、それは本当です。

コードを次のように変更しました。

Taskstatus.where(:statuscode => "New")

そして New は id = 2 ですが、タスクは 1 になりました

postgreSQL に問題がある可能性はありますか?

4

2 に答える 2

1

他の人が言っているように、.first注文されていません。

これを解決するには、明示的な順序付け()を追加する.order(:id).firstか、を使用しdefault_scope常に結果を順序付けます。

class Taskstatus < ActiveRecord::Base

  default_scope order(:id)

end

Taskstatus.firstこれで、常にID順に並べられた最初のレコードになります。created_atこれは、注文が変更され、最も早いレコードを「最初の」レコードと見なしてしまう場合に役立つことがあります。

于 2013-01-06T15:01:25.687 に答える
1

これを試して

Taskstatus.order("id").first
于 2013-01-06T14:54:27.177 に答える