

以下のように新規登録を行いました。  
その後、「編集」ボタンを押下して、商品名を「商品B」から「hogehoge」に変更しました。

「2 ステンレス 商品B F-078 10K 350A 3 P 2,000 3,000 4,000 9,000」  
「2 ステンレス hogehoge F-078 10K 350A 3 P 2,000 3,000 4,000 9,000」  
その後「登録」ボタンを押下したところ、レコードの順番が入れ替わって表示されました。  
costsテーブルの中身も確認したところ、やはりレコードの順番が入れ替わって登録(更新)されていました。  
考えられる原因はありますでしょうか？  
思い当たる原因がありましたらアドバイス頂きたいです。  
URLで申し訳ありません。  
何卒宜しくお願い致します。

<https://github.com/hiro-hvk/sample_order_app>

**新規登録時の入力内容**  
符号 材質 / 部品NO 品名 型式 圧力 サイズ 数量 単位 仕入先A 仕入先B 仕入先C 売価  
1 ステンレス 商品A F-065 10K 300A 5 P 1,000 2,000 3,000 6,000  
2 ステンレス 商品B F-078 10K 350A 3 P 2,000 3,000 4,000 9,000  
3 ステンレス 商品C F-084 10K 400A 6 P 3,000 0 5,000 8,000

**更新時の入力内容**  
符号 材質 / 部品NO 品名 型式 圧力 サイズ 数量 単位 仕入先A 仕入先B 仕入先C 売価  
1 ステンレス 商品A F-065 10K 300A 5 P 1,000 2,000 3,000 6,000  
2 ステンレス hogehoge F-078 10K 350A 3 P 2,000 3,000 4,000 9,000  
3 ステンレス 商品C F-084 10K 400A 6 P 3,000 0 5,000 8,000

**更新後の表示**  
符号 材質 / 部品NO 品名 型式 圧力 サイズ 数量 単位 仕入先A 仕入先B 仕入先C 売価  
1 ステンレス 商品A F-065 10K 300A 5 P 1,000 2,000 3,000 6,000  
3 ステンレス 商品C F-084 10K 400A 6 P 3,000 0 5,000 8,000  
2 ステンレス hogehoge F-078 10K 350A 3 P 2,000 3,000 4,000 9,000

### ※追記

costs_contoroller.rb

[code]

    def index
      @costs = Cost.all.order(:id)
    end
    
[/code]

subjects_contoroller.rb

[code]

    private
    
    def set_subject
      @subject = Subject.find(params[:id])
      @subjects = @subject.costs.order(:id)
    end
    
[/code]

を追記しまして、views/subjects/ show.html.erb ではcostsテーブルの「id」順に並べることができました。

符号 材質 / 部品NO 品名 型式 圧力 サイズ 数量 単位 仕入先A 仕入先B 仕入先C 売価  
1 ステンレス 商品A F-065 10K 300A 5 P 1,000 2,000 3,000 6,000  
2 ステンレス hogehoge F-078 10K 350A 3 P 2,000 3,000 4,000 9,000  
3 ステンレス 商品C F-084 10K 400A 6 P 3,000 0 5,000 8,000

ただ、その後「編集」ボタンを押下したところ、views/subjects/edit.html.erbの_form.html.erbでは、レコードの順番が入れ替わったままでした。以下の状態でした。

符号 材質 / 部品NO 品名 型式 圧力 サイズ 数量 単位 仕入先A 仕入先B 仕入先C 売価  
1 ステンレス 商品A F-065 10K 300A 5 P 1,000 2,000 3,000 6,000  
3 ステンレス 商品C F-084 10K 400A 6 P 3,000 0 5,000 8,000  
2 ステンレス hogehoge F-078 10K 350A 3 P 2,000 3,000 4,000 9,000

このページもcostsテーブルの「id」順に並べることはできますでしょうか？  
現状は、updateメソッド実行後にcostsテーブルのレコードの順番が入れ替わっている状況です。

[code]

    def update
        respond_to do |format|
          if @subject.update(subject_params)
            format.html { redirect_to @subject, notice: 'Subject was successfully updated.' }
            format.json { render :show, status: :ok, location: @subject }
          else
            format.html { render :edit }
            format.json { render json: @subject.errors, status: :unprocessable_entity }
          end
        end
     end
    
[/code]

宜しくお願い致します。


CC BY-SA 3.0
2016-10-22T05:00:53.320
29792
2016-10-22T10:49:40.643
2016-10-22T10:05:45.850
12323
12323
question
ruby-on-rails ruby rails-activerecord postgresql
RailsアプリのActiverecordで、一括更新後テーブルのレコード(id)の順番が入れ替わってしまいます。


`costs#index` の処理だと思いますが、コントローラでは以下のように書かれています。

[code]

    def index
      @costs = Cost.all
    end
    
[/code]

SQLデータベースでは明示しない限り順序は保証されません。(呼び出すごとに変化する可能性もあります。) 順序が問題になる場合は、必要に応じて
`.order` を利用してソートしてください。


CC BY-SA 3.0
2016-10-22T05:17:07.447
29793
2016-10-22T05:17:07.447
76
29792
answer


yasu さんが書かれたように、望んだ順序にするためには必ず `order` を付けましょう。

とくに、PostgreSQLをお使いのようですが、コイツは追記型でデータを書き込むので、更新すると「テーブル末尾に新たな内容でレコードを追加し、元のレコードを使わないようにする」という動作をします。


CC BY-SA 3.0
2016-10-22T10:49:40.643
29796
2016-10-22T10:49:40.643
17037
29792
answer