在我的一个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个属性。
答案 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
了解详情。