Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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 如何在使用布局和部分时动态显示自定义标题_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何在使用布局和部分时动态显示自定义标题

Ruby on rails 如何在使用布局和部分时动态显示自定义标题,ruby-on-rails,Ruby On Rails,我有一个布局和部分工作良好。问题是不同的型号都有相同的名称。如果我可以为每个模型自定义标题,那就太好了 这是我的布局: 这是我的控制器,我试着根据它工作: class ViewerController

我有一个布局和部分工作良好。问题是不同的型号都有相同的名称。如果我可以为每个模型自定义标题,那就太好了

这是我的布局:


这是我的控制器,我试着根据它工作:

class ViewerController
我尝试将布局更改为,但没有成功。我还尝试根据其他帖子将控制器更改为helpers.content_(标题)“查看器”和elpers.content_(标题)| |“查看器”,但都失败了


如果这种方法不起作用,那么我愿意接受另一种方法。

您的布局应该是
yield:title
,而不是
content\u for:title
。通过这种方式,对于控制器,您可以按照已经正确执行的操作,即将布局的内容设置为其各自的标题


使用
yield:title
时,除了由其他控制器/视图/模型处理之外,您实际上在做与
渲染
相同的事情。

在application\u helper.rb中添加以下代码:

def full_title(page_title = '')                    
  base_title = "Ruby on Rails Tutorial Sample App" 
  if page_title.empty?                             
    base_title                                     
  else
    page_title + " | " + base_title                 
end
在application.html.erb文件中添加以下代码:

<title><%= full_title(@title) %></title>

但是,使用实例变量来显示标题不是一个好主意。

我想出来了。以下是我的布局:

<!DOCTYPE HTML>

<html>
<head>

    <title><%= yield :title %></title>

</head>
<body>

    <%= render 'header' %>
    <%= render "sidebar" %>    
    <%= render "content" %>
    <%= render template: "layouts/footer" %>

</body>

以下是我的视图(index.html.erb):



我不知道erb会执行,即使它没有被调用在任何地方显示。我哪儿也没有。我可以把HTML放在那里,没有人会看到它。但是ruby代码将执行。

这不起作用,因为没有单独的页面,只有布局。我尝试在控制器中提供(:title,“Home”),但它不起作用。提供(:title,“Home”)在控制器中不起作用,它仅用于查看。如果要从控制器设置标题,必须使用实例变量OK,那么如何使实例变量仅显示标题?yield:没有实例变量,标题不起作用。和provide(:title,“Home”)在控制器中不起作用。我发现,如果index.html.erb中有一行代码为“”的话,它就起作用了。我不知道html.erb文件会执行,即使它没有显示在布局中。这个设计干净吗?除非有人指出更好的方法,否则我会将其作为解决方案发布。可能是
<title><%= full_title(@title) %></title>
@title = "Home"
<!DOCTYPE HTML>

<html>
<head>

    <title><%= yield :title %></title>

</head>
<body>

    <%= render 'header' %>
    <%= render "sidebar" %>    
    <%= render "content" %>
    <%= render template: "layouts/footer" %>

</body>
<% provide(:title, "Viewer") %>