我正在实施功能开关'因此,管理员可以使用管理员Web界面打开和关闭新功能。
我可以在视图中轻松完成此操作,例如
- if FeatureSwitch.where(name: 'display_demo_feature_switch_image', status: 'on').count > 0
# in reality would refactor that query to the controller/model. put here for clarity.
%br
%br
%div{class: "onoffswitch"}
%input{type: "checkbox", name: "onoffswitch", class: "onoffswitch-checkbox", id: "myonoffswitch"}
%label{class: "onoffswitch-label", for: "myonoffswitch"}
%span{class: "onoffswitch-inner"}
%span{class: "onoffswitch-switch"}
但是,当我使用资产管道并使资产有条件地“处理”时,我怎样才能在视图中执行此操作。包括?
所以如果我有一个css资产清单(app/assets/stylesheets/application.css
):
/*
*= require_self
*= require main
*= require default
*= require on_off_switch
*= require jquery-ui-1.8.22.custom.css
*/
我如何制作require on_off_switch
"条件",取决于来自
FeatureSwitch
.where(name: 'display_demo_feature_switch_image', status: 'on').count > 0
我尝试将application.css
重命名为application.css.erb
并使用
<% if 'abc' == 'def' %> # While developing/testing
*= require on_off_switch
<% end %>
但是,尽管'abc' == 'def'
是假的......
答案 0 :(得分:0)
一种可能的解决方案是创建两个清单,例如on.css和off.css
在你的控制器中添加一个before_filter:
def my_before_filter_name
@count = FeatureSwitch.where(name: 'display_demo_feature_switch_image', status: 'on').count
end
顺便说一句,请避免在视图中使用有效记录。
在你的布局中:
- if @count > 0
= stylesheet_link_tag 'on.css'
- else
= stylesheet_link_tag 'off.css'
请注意,您可能需要测试@count是否存在。
如果此解决方案不是您的最佳选择,您可以使用content_for。在你的布局产量:on_off并在你的视图中添加一个content_for:on_off并测试@count到stylesheet_link_tag&#39; on_off_switch&#39; (rails documentation)
中的更多详细信息答案 1 :(得分:0)
解决方案似乎只是将条件放在最上面
app/views/layout/application.html.haml # (I use haml instead of erb)
即
= stylesheet_link_tag 'application'
- if FeatureSwitch.where(name: 'display_demo_feature_switch_image', status: 'on').count > 0
= stylesheet_link_tag 'on_off_switch'
但是虽然这在开发中起作用,但它并没有在生产中进行,并且不会包含样式表。