現在、私はユーザーとアセット テーブル (postgres バックエンド) を持っています。ユーザーが新しいアセットを作成すると、アセット ID が予想通り 1、2、3 などに設定され、現在のアセットのタグ付けに基づいて ###1 として表示されます。方法。
資産管理システムの一部として、現在のシステムからエクスポートされた資産をインポートする必要があります。現在の ID を使用してこれらのアセットを作成するために、roo と find_by_or_initialize を使用しています。ただし、新しいアセットを追加しようとすると、最初の無料の ID が使用され、シーケンスの次の ID を使用する代わりにそれが使用されます。これは問題にはなりませんが、既存の管理システムには約 200 の欠落番号があり、現時点では手動で追加する以外に解決策が思いつきません。
たとえば、id で最初の空白を使用しないようにする方法はありますか。1、2、6、7、8、12?
これはアセットの create メソッドです
def create
@asset = current_user.assets.build(params[:asset])
if @asset.save
redirect_to root_path
flash.now[:success] = "Asset created!"
else
render 'static_pages/home'
end
end
これは、既存のアセットをインポートするために使用される方法です
def self.import(file)
spreadsheet = open_spreadsheet(file)
header = spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row = Hash[[header, spreadsheet.row(i)].transpose]
asset = find_or_initialize_by_id(spreadsheet.cell(i, 'A')) || new
asset.attributes = row.to_hash.slice(*accessible_attributes)
asset.save!
end
end
編集:これは現在の動作の例です