0

In the below code retrive data from database arrange those & delete from database again insert

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

that is not working if i remove p(@page_data) line

4

2 回答 2

0

看起来至少有一个问题是您在块.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 回答
0

我不太明白您要做什么,但我怀疑我确实知道输出@page_data变量会产生影响的原因。

@page_data是一个 ActiveRecord::Relation 对象 - 即存储的 SQL 查询。因为执行查询并将结果对象加载到内存中需要时间,Rails 直到必须执行时才会真正执行查询。当您输出时@page_data,它必须实例化这些对象以打印输出。然后它们存在于内存中,即使在下一行从数据库中删除它们的行后也可以引用它们。

如果您打印该数据,它将在下一行保持未实例化,您将在其中删除所有这些行。然后,你调用.each它,它在那个时候被实例化,并且没有要获取的对象,因为你刚刚删除了它们。

您可以在第一次定义时@page_data通过调用.all, 强制 Rails 实例化关系,因此:

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