在 Rails 中创建动态属性和 CSS 类
Create dynamic attributes and CSS classes in Rails
我在 Rails(5.2) 的 Ruby 中收到了关于造型的枯燥问题。
1.我想达到的目标
所以我正在为房屋销售创建便利设施 表格 部分,我得到以下信息:
但我正在查看我的代码,老实说这太可怕了!
<%= form.fields_for :rules do |rules_form| %>
<div class="col l4 m2 s4">
<label>
<div class="input-field">
<i class="material-icons-two-tone">pets</i>
<%= rules_form.check_box(:pets_allowed, {}) %>
<span for="pets_allowed">Pets Allowed</span>
</div>
</label>
</div>
<div class="col l4 m2 s4">
<label>
<div class="input-field">
<i class="material-icons-two-tone">smoking_rooms</i>
<%= rules_form.check_box(:permitted_smoking, {}) %>
<span for="permitted_smoking">Smoking Allowed</span>
</div>
</label>
</div>
<div class="col l4 m2 s4">
<label>
<div class="input-field">
<i class="material-icons-two-tone">people</i>
<%= rules_form.check_box(:allowed_visitors, {}) %>
<span for="allowed_visitors">Vists Allowed</span>
</div>
</label>
</div>
and so on.....
2。我想做的事:
所以是的,如您所见,这不是一件枯燥的事情。我想做的是这样的:
<%= form.fields_for :rules do |rules_form| %>
<div class="col l4 m2 s4">
<label>
<div class="input-field">
<i class="material-icons-two-tone">[dynamic icon]</i>
<%= rules_form.check_box([dynamic db column name], {}) %>
<span for="pets_allowed">[dynamic text to display]</span>
</div>
</label>
</div>
<% end %>
可能这不是语法,但您明白了。
3。到目前为止我做了什么:
好的,这就是我一直想做的事情,1. 在我的帮助程序文件上创建一个类似这样的方法:
def servicesArray
serv = ['wifi', 'gas', 'water', 'electricity', 'include_furniture', 'air_conditioning', 'business_center', 'laundry', 'television', 'guard']
serv.each do |obj|
puts obj
end
end
然后为了验证这一点,我在我的 form 上调用它,我看到了这个:
好的,但不是预期的那样,所以我的问题是:
我怎样才能实现这样的目标?处理动态 CSS 类 and/or 属性以避免大量代码块的最佳方法是什么?你建议我将来做什么?
非常感谢您对此的帮助!谢谢
有多种方法可以做到这一点,但从最简单的开始:
制作一个帮助器,returns 表单所需的所有动态数据。查看您的代码,似乎每个复选框都需要 3 个东西 - 标题、参数名称和全名。所以,你可以像这样写一个辅助方法:
def services_array
[
{ title: "pets", param_name: :pets_allowed, full_name: "Pets Allowed" },
{ title: "people", param_name: :allow_visitors, full_name: "Visits Allowed" },
{ title: "smoking_rooms", param_name: :permitted_smoking, full_name: "Smoking Allowed" }
]
end
在你看来,循环这个:
<%= form.fields_for :rules do |rules_form| %>
<% services_array.each do |service| %>
<div class="col l4 m2 s4">
<label>
<div class="input-field">
<i class="material-icons-two-tone"><%= service[:title] %></i>
<%= rules_form.check_box(service[:param_name], {}) %>
<span for="<%= service[:param_name] %>"><%= service[:full_name] %></span>
</div>
</label>
</div>
<% end %>
<% end %>
我在 Rails(5.2) 的 Ruby 中收到了关于造型的枯燥问题。
1.我想达到的目标
所以我正在为房屋销售创建便利设施 表格 部分,我得到以下信息:
但我正在查看我的代码,老实说这太可怕了!
<%= form.fields_for :rules do |rules_form| %>
<div class="col l4 m2 s4">
<label>
<div class="input-field">
<i class="material-icons-two-tone">pets</i>
<%= rules_form.check_box(:pets_allowed, {}) %>
<span for="pets_allowed">Pets Allowed</span>
</div>
</label>
</div>
<div class="col l4 m2 s4">
<label>
<div class="input-field">
<i class="material-icons-two-tone">smoking_rooms</i>
<%= rules_form.check_box(:permitted_smoking, {}) %>
<span for="permitted_smoking">Smoking Allowed</span>
</div>
</label>
</div>
<div class="col l4 m2 s4">
<label>
<div class="input-field">
<i class="material-icons-two-tone">people</i>
<%= rules_form.check_box(:allowed_visitors, {}) %>
<span for="allowed_visitors">Vists Allowed</span>
</div>
</label>
</div>
and so on.....
2。我想做的事:
所以是的,如您所见,这不是一件枯燥的事情。我想做的是这样的:
<%= form.fields_for :rules do |rules_form| %>
<div class="col l4 m2 s4">
<label>
<div class="input-field">
<i class="material-icons-two-tone">[dynamic icon]</i>
<%= rules_form.check_box([dynamic db column name], {}) %>
<span for="pets_allowed">[dynamic text to display]</span>
</div>
</label>
</div>
<% end %>
可能这不是语法,但您明白了。
3。到目前为止我做了什么:
好的,这就是我一直想做的事情,1. 在我的帮助程序文件上创建一个类似这样的方法:
def servicesArray
serv = ['wifi', 'gas', 'water', 'electricity', 'include_furniture', 'air_conditioning', 'business_center', 'laundry', 'television', 'guard']
serv.each do |obj|
puts obj
end
end
然后为了验证这一点,我在我的 form 上调用它,我看到了这个:
好的,但不是预期的那样,所以我的问题是:
我怎样才能实现这样的目标?处理动态 CSS 类 and/or 属性以避免大量代码块的最佳方法是什么?你建议我将来做什么?
非常感谢您对此的帮助!谢谢
有多种方法可以做到这一点,但从最简单的开始:
制作一个帮助器,returns 表单所需的所有动态数据。查看您的代码,似乎每个复选框都需要 3 个东西 - 标题、参数名称和全名。所以,你可以像这样写一个辅助方法:
def services_array [ { title: "pets", param_name: :pets_allowed, full_name: "Pets Allowed" }, { title: "people", param_name: :allow_visitors, full_name: "Visits Allowed" }, { title: "smoking_rooms", param_name: :permitted_smoking, full_name: "Smoking Allowed" } ] end
在你看来,循环这个:
<%= form.fields_for :rules do |rules_form| %> <% services_array.each do |service| %> <div class="col l4 m2 s4"> <label> <div class="input-field"> <i class="material-icons-two-tone"><%= service[:title] %></i> <%= rules_form.check_box(service[:param_name], {}) %> <span for="<%= service[:param_name] %>"><%= service[:full_name] %></span> </div> </label> </div> <% end %> <% end %>