我怎样才能把这个火腿弄干?
How can I DRY up this Haml?
我在 Rails 应用程序中工作,我已经让这个 Haml 重复了十几次。我该如何重构这个?我觉得 helper 会很适合这个,但我真的不确定 helper 中应该包含什么代码。
- if @object.thing
.row
.col-md-12
.campaign-summary-title Thing
= render text: @campaign.thing.html_safe
- if @object.thing2
.row
.col-md-12
.campaign-summary-title Thing2
= render text: @object.thing2.html_safe
我找到了这个,但这不是同一个问题:Dont show field if blank Rails
怎么样:
- [:thing, :thing2].each do |thing_sym|
- if @object.send(thing_sym)
.row
.col-md-12
.campaign-summary-title #not sure what you want here
= rendertext: @campaign.send(thing_sym).html_safe
您将不得不对标题位大惊小怪,因为不清楚您希望如何导出 Thing
、Thing2
等
您可以使用 partial。您的部分 (_partial_name.html.haml
) 看起来像:
- if @object[field]
.row
.col-md-12
.campaign-summary-title= field.capitalize
= render text: @object[field].html_safe
这允许您在不同的文件中使用此代码,调用方式如下:
= render partial: "partial_name", field: "thing"
= render partial: "partial_name", field: "thing2"
如果有很多字段,你可以这样写:
- ["thing", "thing2"].each do |field|
= render partial: "partial_name", field: field
我在 Rails 应用程序中工作,我已经让这个 Haml 重复了十几次。我该如何重构这个?我觉得 helper 会很适合这个,但我真的不确定 helper 中应该包含什么代码。
- if @object.thing
.row
.col-md-12
.campaign-summary-title Thing
= render text: @campaign.thing.html_safe
- if @object.thing2
.row
.col-md-12
.campaign-summary-title Thing2
= render text: @object.thing2.html_safe
我找到了这个,但这不是同一个问题:Dont show field if blank Rails
怎么样:
- [:thing, :thing2].each do |thing_sym|
- if @object.send(thing_sym)
.row
.col-md-12
.campaign-summary-title #not sure what you want here
= rendertext: @campaign.send(thing_sym).html_safe
您将不得不对标题位大惊小怪,因为不清楚您希望如何导出 Thing
、Thing2
等
您可以使用 partial。您的部分 (_partial_name.html.haml
) 看起来像:
- if @object[field]
.row
.col-md-12
.campaign-summary-title= field.capitalize
= render text: @object[field].html_safe
这允许您在不同的文件中使用此代码,调用方式如下:
= render partial: "partial_name", field: "thing"
= render partial: "partial_name", field: "thing2"
如果有很多字段,你可以这样写:
- ["thing", "thing2"].each do |field|
= render partial: "partial_name", field: field