0

私はレールに不慣れで、次の問題で立ち往生しています。

人間が読める形式の顧客IDには、永続的なクラス変数(私は思う)が必要です。顧客クラスは、単一テーブル継承セットアップの連絡先クラスのサブクラスであるため、データベースで生成されたIDは線形に昇順ではないため、役に立ちません。

ある種のcounter/idを実装するには、クラス変数またはグローバル変数が必要だと思います(顧客を削除できるため、countメソッドではありません)。私は正しいですか?この場合、クラス変数を何らかの方法でデータベースに保存する必要がありますよね?

私は少し迷っています

  1. それを保存する方法
  2. 正確にインクリメントする場合:最初のスーパーを呼び出して、新しいメソッドをオーバーライドする必要がありますか?
  3. ある時点でアプリケーションを再起動する必要がある場合に値をロードする方法

代わりにMultibleTableInheritenceセットアップを選択し、データベースIDを使用する必要がありますか?両方のクラスのフィールドの90%以上が同じであるため、これは厄介なことです。

4

1 に答える 1

1

なぜあなたの ID はリニアなのですか? そして、なぜそれは線形ではないのですか?

私はあなたがどこかで間違っていたと思いますが、私があなたを誤解した場合に備えて、移行を追加し (Customer テーブルに属性 'generatedID' を追加します)、次のようなメソッドを書くことができます:

def generateID
  if Customer.all.count == 0
   1
  else
    Customer.last.generatedID + 1
  end
end

次に、Customer オブジェクトを保存すると、次のようになります。

@customer = Customer.new(params[:user])
@customer.generatedID = generateID
@customer.save!

しかし、これは本当に悪いアプローチです。常にオブジェクトのIDを読み取ってユーザーに表示できますが、それが線形ではないかどうかは本当にわかりません。

于 2013-03-07T10:24:43.013 に答える