Rails 4 - 从已过滤的 Active Record 查询中删除属性
Rails 4 - Remove attributes from an already filtered Active Record query
在 Rails 4 控制器上的一个 ruby 中,我有一种方法可以将必要的数据注入视图。
html 所需的数据和 javascript 所需的数据之间存在差异。我正在使用 gon 将数据注入 js 脚本。
我的应用程序工作正常,但 gon 正在注入 HTML(仅供参考,在 body 标签下方的脚本中)太多数据,因为我只需要 Gon/Javascript HTML 视图所需的 5 个属性中的 2 个。 (希望如此的原因:当我加载很多对象时,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
我不想像下面那样创建另一个新选择,因为它会在数据库上创建一个新的 request/hit。
@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 个属性。
您可以使用 as_json
来控制 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
查看 as_json
了解更多信息。
在 Rails 4 控制器上的一个 ruby 中,我有一种方法可以将必要的数据注入视图。
html 所需的数据和 javascript 所需的数据之间存在差异。我正在使用 gon 将数据注入 js 脚本。
我的应用程序工作正常,但 gon 正在注入 HTML(仅供参考,在 body 标签下方的脚本中)太多数据,因为我只需要 Gon/Javascript HTML 视图所需的 5 个属性中的 2 个。 (希望如此的原因:当我加载很多对象时,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
我不想像下面那样创建另一个新选择,因为它会在数据库上创建一个新的 request/hit。
@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 个属性。
您可以使用 as_json
来控制 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
查看 as_json
了解更多信息。