Ruby On Rails - 包含CSS和JS的最佳方式

时间:2014-08-31 22:02:21

标签: javascript css ruby-on-rails assets

我是Ruby on Rails的新手,我正在寻找一种正确的方法,将CSS / JS库包含在一个特殊的控制器和方法中,以避免无用的请求。

现在我用这个"丑陋"方式:

- # In a layout
- # IndustryManager::index -> We want load jquery toggles
- if action_name == "index" and controller_name == "industry_manager"
  = javascript_include_tag "jquery-toggles/js/Toggles"
  = javascript_include_tag "jquery-toggles/js/wrap"
  = stylesheet_link_tag "jquery-toggles/css/toggles-full"

1 个答案:

答案 0 :(得分:1)

一些比您正在做的更清洁的选项:

1)为您需要的每个css / j组合设置一个布局,并在操作中指定适当的布局。如果你有一组使用相同css / js的动作,这才真正有意义,否则每个动作都会有一个布局,这是一团糟。

2)这与您正在做的事情几乎相同,但更可重复使用 - 在您的操作中设置变量,例如@include_toggles = true,然后包含" jquery-toggles&# 34;只有当该变量为真时。然后,您可以在需要jquery-toggles的其他操作中重用该变量,而无需检查特定的操作和控制器名称。

3)如果每个操作都有自己的css / js未与其他操作共享,则可以将文件组织在具有操作名称的目录中。然后,您可以按照https://stackoverflow.com/a/8902949/1786750中所述包含该目录中的所有文件,在路径中插入当前操作的名称,以便仅获取当前操作所需的文件。所以对于索引:

<%= javascript_include_tag Dir[Rails.root.join("public/javascripts/views/#{action_name}/*.js")].map { |s| s.sub(Rails.root.join("public/javascripts/").to_s, "") } %>

(从上面的答案中删除了该代码,我刚刚添加#{action_name}来说明这个概念。)

希望有所帮助。可能有更好的选择,但上述至少是简单和相对干净。