我有一个HTML模板,它应该根据控制器上的某些设置更改application.rb模板中的body类。
当我想从视图中改变它时,我知道如何做到这一点。我这样做的事情是:
# in view
<% layout_class("full", boxed: false) %>
# helper method
module TemplateHelper
def layout_class(class_name="")
content_tag("body", :id => "fluidGridSystem", :class => class_name) do
yield
end
end
end
忘记上面的行!
# index_controller.rb
class IndexController < ApplicationController
def index
@layout_class = "hello"
end
end
# app/helpers/template_helper.rb
module TemplateHelper
def body_wrapper
content_tag("body", :id => "fluidGridSystem", :class => @layout_class) do
if some_logic # show <body> only
yield
else # add some more <div>'s
blog_wrapper do
yield
end
end
end
def blog_wrapper(inner="", outer="")
content_tag("div", :class => outer) do
content_tag("div", :class => inner) do
yield
end
end
end
end
end
# application.rb
<html>
<head>
</head>
<%= body_wrapper do %> # this part generates <body class="hello">
<%= flash_messages %>
<%= yield %>
<% end %> # </body>
</html>
但@layout_class
未传递给助手。
答案 0 :(得分:0)
我认为你的问题是你的助手方法的名字与你所说的不同?
我不知道body_wrapper
,但您正在调用layout_class
- 两种不同的方法。你为什么不试试这个:
#app/helpers/template_helper.rb
module TemplateHelper
def layout_class
content_tag("body", :id => "fluidGridSystem", :class => @layout_class ) do
yield
end
end
end
#app/views/layouts/application.html.erb
<body class="<%= layout_class(@layout_class) %>">
还有另外两种方法可以做到这一点:
<强> 1。更改布局
如果您只有一些标准需要更改,您可以尝试:
#app/controllers/your_controller.rb
layout :layout
private
def layout
if #your_logic
"layout"
else
"other_layout"
end
end
<强> 2。直接从视图
致电@layout_class
#app/views/layouts/application.rb
<body class="<%= @layout_class %>">
如果设置了@layout_class
,这将显示该类,如果不是