0

以下のコードでは、データベースからデータを取得し、それらを配置してデータベースから削除し、再度挿入します。

page_nos = [10,11,12,13,14,20,21,22,23,24,30,31,32,33,34,40,41,42,43,44]

page_nos.each do |page|
  @page_data = HomePageSetting.where("page_no = '#{page}'").order("score desc")
  p(@page_data)
  HomePageSetting.where("page_no = #{page}").delete_all
  @page_data.each do |data|
    @home_page = HomePageSetting.new
    @home_page.subject_id = data.subject_id
        @home_page.subject_type = data.subject_type
        @home_page.score = data.score
        @home_page.flag = data.flag
        @home_page.flag_detail = data.flag_detail
        @home_page.page_no = data.page_no
        @home_page.release_date = data.release_date
        @home_page.item_created_at = data.item_created_at
        @home_page.save
      end
    end

p(@page_data)行を削除すると機能しません

4

2 に答える 2

0

あなたが何をしようとしているのかよくわかりませんが、@page_data変数を出力すると違いが生じる理由はわかっていると思います。

@page_dataActiveRecord::Relation オブジェクト、つまりストアド SQL クエリです。クエリを実行して結果のオブジェクトをメモリにロードするには時間がかかるため、Rails は実際には必要になるまでクエリを実行しません。を出力するとき@page_data、それらのオブジェクトをインスタンス化して出力を印刷する必要があります。これらはメモリ内に存在し、次の行でデータベースから行を削除した後でも参照できます。

そのデータを出力しないと、次の行でインスタンス化されずに残り、そこですべての行が削除されます。次に、それを呼び出すと、その時点.eachでインスタンス化され、取得するオブジェクトはありません。すべて削除したためです。

@page_dataを呼び出して最初に定義するときに、Rails にリレーションをインスタンス化させることができます.all

@page_data = HomePageSetting.where("page_no = '#{page}'").order("score desc").all
于 2012-06-28T16:18:14.283 に答える
0

少なくとも 1 つの問題は.save、ブロック内で呼び出していることのようです - の.newにレコードを保存する必要があります。

変更されたコードは次のとおりです。

page_nos = [10,11,12,13,14,20,21,22,23,24,30,31,32,33,34,40,41,42,43,44]

page_nos.each do |page|
  @page_data = HomePageSetting.where("page_no = '#{page}'").order("score desc")
  p(@page_data)
  HomePageSetting.where("page_no = #{page}").delete_all
  @page_data.each do |data|
    @home_page = HomePageSetting.new
    @home_page.subject_id = data.subject_id
        @home_page.subject_type = data.subject_type
        @home_page.score = data.score
        @home_page.flag = data.flag
        @home_page.flag_detail = data.flag_detail
        @home_page.page_no = data.page_no
        @home_page.release_date = data.release_date
        @home_page.item_created_at = data.item_created_at
      end
      @home_page.save
    end

このような問題が発生した場合は、時々使用.save!します。データが正しく保存されない場合、処理が停止し、例外がスローされます。.save黙って失敗し、単純に を返すことができfalseます。@home_page.save!代わりにその使用を試すには。

幸運を!

于 2012-06-29T12:26:34.493 に答える