如何只在一个控制器动作中包含代码?

时间:2011-06-04 23:47:53

标签: ruby-on-rails-3 views conditional

我的整个应用程序中只有一个页面需要jquery ui。如何在该单页中有条件地包含javascript文件?

我相信Rails 2我可以使用:(在application.html.erb中)

<%- if controller.controller_name == "posts" && controller.controller_action == "new" -%>
  <%= stylesheet_link_tag 'jquery-ui-1.8.13.custom.css' %> 
  <%= javascript_include_tag 'jquery-ui-1.8.13.custom.min.js', 'autocomplete-rails.js' %>
<%- end -%>

但是controller.controller_action会抛出一个未定义的方法错误。看完API后,看起来它已被删除了?

也许最好完全删除application.html.erb中的条件并将其放在posts/new.html.erb的顶部?

2 个答案:

答案 0 :(得分:4)

我会避免将此责任委托给您的应用程序布局。如果您不需要在多个视图上使用jQuery UI,那么最好让视图处理它。下面让你这样做,同时仍然保持你的输出HTML干净和明智(即不要把JS全部放在这个地方)。

在您的布局(application.html.erb)中:

<head>
  <title>Foo Bar</title>
  <%= yield :page_specific_assets %>
</head>

在您的视图中需要jQuery UI(posts/new.html.erb):

<% content_for :page_specific_assets do %>
  <%= stylesheet_link_tag 'jquery-ui-1.8.13.custom.css' %> 
  <%= javascript_include_tag 'jquery-ui-1.8.13.custom.min.js', 'autocomplete-rails.js' %>
<% end %>

注意:尽管惯例,但在<head>中添加不必要的javascript会降低性能。

答案 1 :(得分:1)

我相信它是:

controller.action_name