Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在视图中使用ERB将类添加到主体-Rails_Ruby On Rails_Ruby_Erb - Fatal编程技术网

Ruby on rails 在视图中使用ERB将类添加到主体-Rails

Ruby on rails 在视图中使用ERB将类添加到主体-Rails,ruby-on-rails,ruby,erb,Ruby On Rails,Ruby,Erb,我注意到在视图中添加页面标题时,是否有一种方法可以执行相同的操作,但可以将类添加到body标记中?不确定您的意思,您可以使用相同的方法: 从某种角度来看: <% content_for :body_class, "my_class" %> 在布局文件中: <body class="<%= yield (:body_class) %>"> 我通常会为这样的东西创建一个helper方法,这样就可以清晰地设置默认值 application_helper.rb

我注意到在视图中添加页面标题时,是否有一种方法可以执行相同的操作,但可以将类添加到body标记中?

不确定您的意思,您可以使用相同的方法:

从某种角度来看:

<% content_for :body_class, "my_class" %>

在布局文件中:

<body class="<%= yield (:body_class) %>">

我通常会为这样的东西创建一个helper方法,这样就可以清晰地设置默认值

application_helper.rb
  def body_class(class_name="default_class")
    content_for :body_class, class_name
  end


view:
  <% body_class "foo" %>

application.html.erb
  <body class="<%= yield (:body_class) %>">
application\u helper.rb
def主体类(class_name=“default_class”)
内容:主体类、类名
结束
视图:
application.html.erb

有时使用当前控制器名称作为类名,我们将执行以下操作:

<body class="<%= controller.controller_name %>">

我觉得这更简单,也更优雅一些,但当然,这样您就不能指定单个类名了

美国

在布局页面中:

<% if content_for?(:body_class) %>
  <body class="<%= content_for(:body_class) %>" >
<% else %>
 <body>
<% end %>

在内容页中:

<% content_for :body_class do  'my-body-class' end %>

我在我的应用程序中使用了公认的方法有一段时间了,但从来没有真正喜欢过它的工作方式,因为如果没有类,你的body标签上就会有class='',乱扔代码。对于我当前的用例,我只想要一个宽屏类(但您可以根据您的用例使用不同的类轻松地获得更高的级别)。我对这种方法很满意:

在应用程序帮助程序中:

def body_tag(&block)
  content = capture(&block)
  content_tag(:body, content, class: @widescreen ? "widescreen" : nil)
end
在application.html.erb中

<%= body_tag do %>
  <%# the rest of your content here %>
<% end %>
然后在您想要的任何控制器中,只需执行以下操作:

before_action :enable_widescreen
然后,如果您想将类逻辑用于除“宽屏”之外的不同类,请随意使其更高级,但问题是,这是一种优雅的方式,允许在没有指定类的情况下不存在类

<body class>


显示在您的html中。

我更喜欢使用以下方法:

这种方法避免了可怕的


我经常使用控制器名称来确定许多样式的范围,因此如果我只需要一个类,就不需要为每个视图提供内容

jQuery<代码>$('body').addClass('myExyClass')我真的不想在视图中包含脚本。有没有办法停止其他页面上的
?不确定在ERB中是否有一种优雅的方法。不那么优雅的方法是在body标记内执行helper调用,然后返回整个body类(“my_类”)以及“class”属性。请注意,当未设置任何值时,yield(:body_class)调用将返回一个空字符串,因此您可以检查它。@user1919937由于其他页面上的错误,我从未对这种方法感到满意。见下面我的方法。
<body class>