在我的布局/书籍中,我的导航代码能够满足我对书籍的所有观点。
我还有我的标题代码,这些标题会影响我对书籍的所有观点。我真的只想让我的标题代码点击索引并显示而不是我的订单。
我已尝试在我的标题周围添加如下内容:
<% if @render.header == true/false %>
然后加入我的观点:
<% @render.header = true %>
我最终获得了未定义的方法`header&#39;。我也尝试过这样的事情:
我需要做些什么才能使其发挥作用?我应该把东西放进我的控制器吗?
编辑:我在布局/书籍和索引中也尝试了以下内容:
db.url=jdbc:mysql://<HOST>/<SCHEMA>?autoReconnect=true
db.user=<USER>
db.pwd=<PW>
server.port=8000
这导致未定义的meathod&#34; header =&#34;
我可以使用全局变量来实现这一点,但这必须是个坏主意。
答案 0 :(得分:0)
你可以这样做:
if @render && @render.header
答案 1 :(得分:0)
因此,在我的布局/书中徘徊之后:
<% if @render.header == true/false %>
要:
<% $header == true/false %>
哪个有效,但它是全球性的。最后更新我的控制器索引和显示:
def index
@header = true
end
然后我的布局/书籍:
<% @header == true %>
所以是的。变量类型。
答案 2 :(得分:0)
这与我在评论中已经指出的情况完全不同,但在这里它是:
首先,@render
在视图中默认为nil
。因此,当您尝试设置标头的值时,它会失败并显示undefined method 'header=' for nil:NilClass
(因为Rails会为nil:NilClass查找名为#header=
的方法。
您只需在控制器或视图中设置一个普通变量(例如@render_header
)(在呈现标题之前):
<% @render_header = true %>
然后在标题中
<% if @render_header %>
# ...
或者,如果您真的想使用@render
变量,可以将其设置为哈希:
<% @render = { header: true } %>
然后在标题中
<% if @render.present? && @render[:header] %>
# ...
这几乎就像你最初写的那样。
如果您需要为多个控制器操作设置此变量,则可以查看controller filters。它们就像回调一样工作,但对于控制器来说。
例如,你可以这样做:
class MyController < ApplicationController
before_action :set_render_header_to_true, only: [:new, :show]
# ...
private
def set_render_header_to_true
@render_header = true
end
end
这样,对于:new和:show动作,变量将自动设置为true。如果您有多个控制器需要将render_header设置为true,则可以将set_render_header_to_true
方法移动到ApplicationController。例如,这将起作用:
class ApplicationController
private
def set_render_header_to_true
@render_header = true
end
end
class MyController < ApplicationController
before_action :set_render_header_to_true, only: [:new, :show]
# ...
end
class MyOtherController < ApplicationController
before_action :set_render_header_to_true, except: :index
# ...
end
您还可以根据控制器操作指定要呈现的特定布局:
class MyController < ApplicationController
layout 'with_header'
# Use the line below to render header only for specific actions,
# such as new and edit
# layout 'with_header', :only => [:show, :edit]
# ...
end
您甚至可以定义一种动态选择布局的方法:
class MyController < ApplicationController
layout :determine_layout
def determine_layout
if action_name == :new
'layout1'
elsif action_name == :show
'layout2'
else
'application'
end
end
# ...
end
答案 3 :(得分:0)
我认为我不了解你的问题。无论如何你也可以使用content_for。例如,如果添加到layout / books.html.erb:
<%= yield :header %>
对于带有标题的索引/ show / etc视图:
<% content_for :header do %>
<div class="header">
HTML
</div>
<% end %>