Rails 4 - 从已经过滤的Active Record查询中删除属性

时间:2017-11-01 01:06:46

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord gon

在我的一个ruby on Rails 4控制器上,我有一个方法可以为View注入必要的数据。

所需的数据因html所需的数据和javascript所需的数据而异。我正在使用gon将数据注入js脚本。

我的应用程序工作正常,但是gon正在注入HTML(FYI在body标签下方的脚本中)太多数据因为我只需要Gon / Javascript 2所需的5个属性HTML视图。 (希望这样做的原因:当我加载很多对象时,HTML文件的字节差异非常大)

def inject_deal_steps_data
      # Used in html view     
      @steps = @deal.steps.select(:attribute1,
                                  :attribute2,
                                  :attribute3,
                                  :attribute4,                                             
                                  :attribute5). order(attribute4: :asc)

      # Used in js file
      gon.push( { deal_steps: @steps } ) if @steps
    end

我尝试使用像下面的unscope这样的方法,但它没有用。

def inject_deal_steps_data
          # Used in html view     
          @steps = @deal.steps.select(:attribute1,
                                      :attribute2,
                                      :attribute3,
                                      :attribute4,                                             
                                      :attribute5). order(attribute4: :asc)

          # Used in js file
          gon.push( { deal_steps: @steps.unscope(:attribute1,:attribute3,:attribute4 } ) if @steps
        end

我不想创建另一个新的选择,如下所示,因为它会在数据库上创建新的请求/命中。

@steps = @deal.steps.select(:attribute1,
                                      :attribute2,
                                      :attribute3,
                                      :attribute4,                                             
                                      :attribute5). order(attribute4: :asc)
gon.push( { deal_steps: @deal.steps.select(:attribute2,:attribute5) } ) if @deal.steps

我想为GON重复使用为HTML创建的相同的@steps,但是从中删除3个属性。

1 个答案:

答案 0 :(得分:1)

您可以使用to_json来控制gon将展示的内容。 to_json在内部调用ruby,以便将javascript对象转换为def inject_deal_steps_data # Used in html view @steps = @deal.steps.select( :attribute1, :attribute2, :attribute3, :attribute4, :attribute5 ).order(attribute4: :asc) # Used in js file gon.push({ deal_steps: @steps.as_json(except: [:attribute1,:attribute3,:attribute4]) }) if @steps end 对象,并将其公开给视图。

尝试以下方法:

GLib.free()

查看as_json了解详情。